Co zrobic by wysylac maile na skrzynki zewnetrzne?
Obecnie mam skonfigurowane (z konsoli admininistracyjnej):
Mail host: mx.moj_serwer.com
Default user: moj_user@moj_serwer.com
Transport Protocol:smtp
....
Dodalem ponadto przez konsole property:
mail.smtp.auth: true
Kod wyglada tak:
@Resource(name = "mojaJavaMailSession")
private Session session;
...
Message msg = new MimeMessage(this.session);
msg.setFrom(new InternetAddress(MdConfigAplikacji.EMAIL_ZWROTNY));
msg.addRecipient(Message.RecipientType.TO, new
InternetAddress(md.getSEmail()));
msg.setSubject("Temat");
msg.setContent(sContenet, this.utMail.getContentType());
msg.saveChanges();
/**
* wysylamy maila
*/
Transport.send(msg);
I to chodzi dla skrzynek z domeny "moj_serwer.com" dla reszty swiata - nie.
Cwiczylem tez wariant typu:
Properties props = System.getProperties();
// Setup mail server
props.put("mail.transport.protocol", "smtp");
props.put("mail.smtp.host", "mx.moj_serwer.com");
props.put("mail.smtp.auth", true);
// Get session
PwdAuthentificator authenticator = new
PwdAuthentificator("moj_user@moj_serwer.com", "haslo");
Session session = Session.getInstance(props, authenticator);
Transport tr = session.getTransport();
....
I podobnie: chodzi tylko dla skrzynek wenwtraz domeny. Admin twierdzi,
ze do serwera nie dochodzi informacja o tym, ze ma byc autentykacja
(mail.smt.auth=true) i w konsekwencji skutkuje to wyjatkiem:
javax.mail.SendFailedException: Invalid Addresses;
nested exception is:
com.sun.mail.smtp.SMTPAddressFailedException: 554 5.7.1
<woj...@gazeta.pl>: Relay access denied
at com.sun.mail.smtp.SMTPTransport.rcptTo(SMTPTransport.java:1294)
at com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:635)
at javax.mail.Transport.send0(Transport.java:189)
at javax.mail.Transport.send(Transport.java:140)
....
Pozdrawiam,
Wojtek
w pierwszej kolejności wysłanie maila
w drugiej kolejności wysłanie danych autentykacji
a drugi dostawca smtp działający zgodnie z RFC już nie. Dlatego w Twoim
przypadku wnioskuje że tak samo jest. I będzie działać poprawnie w
sytuacji kiedy najpierw pójdzie info o autentykacji a później mail.
Próboje analizować swój kod i szukać różnic w stosunku do Twojego
sposobu (używam tego drugiego sposobu z dwóch przedstawionych przez
Ciebie) wykryłem na pierwszu rzut oka trzy:
- nie używam Session.getInstance(...) ale Session.getDefaultInstance(...)
- używam: session.setDebug(false), przed session.getTransport; (nie
pamietam czy to pozostałość debugowania czy świadomie pozostawienie
wpływające na zachowanie biblioteki
- przed wysyłką i bezpośrednio po korzystam z metod:
transport.connect();
... (wysyłka)
transport.close();
sprawdź te trzy rzeczy
>
> - nie używam Session.getInstance(...) ale Session.getDefaultInstance(...)
>
Przy Session.getDefaultInstance() mialem jakis wyjatek (nie moge teraz
tego przetestowac, dlatego tez nie potrafie powiedziec teraz, jaki to
byl wyjatek).
> - używam: session.setDebug(false), przed session.getTransport; (nie
> pamietam czy to pozostałość debugowania czy świadomie pozostawienie
> wpływające na zachowanie biblioteki
setDebug(false) - tego nie cwiczylem.
>
> - przed wysyłką i bezpośrednio po korzystam z metod:
> transport.connect();
To probowalem w wersjach:
- connect()
- connect(host, user, password)
Bez rezultatu, tj.: lokalne skrzynki sa obslugiwane a reszta swiata - nie.
> ... (wysyłka)
> transport.close();
To mialem zawsze w wariancie drugim.
Pozdrawiam,
Wojtek
>
> a drugi dostawca smtp działający zgodnie z RFC już nie. Dlatego w Twoim
> przypadku wnioskuje że tak samo jest. I będzie działać poprawnie w
> sytuacji kiedy najpierw pójdzie info o autentykacji a później mail.
>
W jaki sposob moge wplynac na kolejnosc wysylania autentykacji i maila?
Jak moge sprawdzic kolejnosc tych wyslanych informacji?
Dzialam na Linuksie.
Dodam jeszcze, ze serwer jest skonfigurowany poprawnie - chodzi
wysylanie maili przez ten serwer na testowane konto mailowe, z klienta
pocztowego.
Pozdrawiam,
Wojtek
Properties props = System.getProperties();
// Setup mail server
props.put("mail.transport.protocol", "smtp");
props.put("mail.smtp.host", "mx.moj_serwer.com");
props.put("mail.smtp.auth", "true"); // "true" a nie true
props.put("mail.smtp.user", "moj_user");
// Get session
URLName uname = new URLName("smtp://moj_user@moj_serwer.com");
PasswordAuthentication pa = new PasswordAuthentication("moj_user", "haslo");
Session session = Session.getInstance(props);
session.setPasswordAuthentication(uname, pa);
o ile dobrze pamietam jezeli wrzucisz setDebug(true), komunikacja smtp
bedzie wyrzucana na stdout,
Miałem kiedyś podobny problem na kontenerze Tomcat, który był
zainstalowany z pakietów. Z tego co pamiętam usunąłem z Tomcata te
jary i wszystko było ok. Nie używałem GlassFisha, wiem, że inaczej
tam działają classloadery, ale może pokombinuj w tą stronę.
pozdr. ad