Próbuję napisać prostą klasę wysyłania wiadomości e-mail, która otrzyma kilka argumentów, a użycie ich spowoduje wysłanie wiadomości e-mail za pośrednictwem naszego serwera Exchange 2010. Podczas uwierzytelniania itp. Wydaje się działać dobrze, otrzymuję następujący wyjątek, gdy kod rzeczywiście próbuje wysłać e-mail (myślę). Upewniłem się, że uwierzytelnianie działa i dostaję transport z powrotem z sesji, ale nadal się nie udaje. Czy ktokolwiek mógłby rzucić coś takiego na to, co robię źle lub zaginęło? Dzięki.JavaMail - javax.mail.MessagingException
Wyjątek:
javax.mail.MessagingException: [EOF]
at com.sun.mail.smtp.SMTPTransport.issueCommand(SMTPTransport.java:1481)
at com.sun.mail.smtp.SMTPTransport.issueSendCommand(SMTPTransport.java:1512)
at com.sun.mail.smtp.SMTPTransport.mailFrom(SMTPTransport.java:1054)
at com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:634)
at javax.mail.Transport.send0(Transport.java:189)
at javax.mail.Transport.send(Transport.java:140)
at com.ri.common.mail.util.MailSender.sendHTMLEmail(MailSender.java:75)
at com.ri.common.mail.util.MailSender.main(MailSender.java:106)
odpowiedni kod:
import java.util.Properties;
import javax.mail.Authenticator;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
public class MailSender
{
public static void sendHTMLEmail(String fromEmailId, String toEmailId, String host, String hostUserName,
String hostPassword, String mailSubject, String mailBody)
{
// Get system properties.
Properties props = System.getProperties();
// Setup mail server
props.put("mail.transport.protocol", "smtp");
props.put("mail.smtp.host", host);
props.put("mail.smtp.auth", "true");
final String hostUName = hostUserName;
final String hPassword = hostPassword;
Authenticator authenticator = new Authenticator()
{
protected PasswordAuthentication getPasswordAuthentication()
{
return new PasswordAuthentication(hostUName, hPassword);
}
};
// Get the default Session object.
Session session = Session.getDefaultInstance(props, authenticator);
try
{
// Create a default MimeMessage object.
MimeMessage message = new MimeMessage(session);
// Set From: header field of the header.
message.setFrom(new InternetAddress(fromEmailId));
// Set To: header field of the header.
message.addRecipient(Message.RecipientType.TO, new InternetAddress(toEmailId));
// Set Subject: header field
message.setSubject(mailSubject);
// Send the actual HTML message, as big as you like
message.setContent(mailBody, "text/html");
// Send message
Transport.send(message, message.getAllRecipients());
System.out.println("Sent message successfully....");
}
catch(Exception mex)
{
mex.printStackTrace();
}
}
public static void main(String[] args)
{
String to = "[email protected]";
String from = "[email protected]";
String host = "correctHostForExch2010";
String user = "correctUser";
String password = "CorrectPassword";
String subject = "Test Email";
String body = "Hi there. This is a test email!";
MailSender.sendHTMLEmail(from, to, host, user, password, subject, body);
}
}
EDIT: włączone debugowanie i mówi
MAIL FROM:<[email protected]> 530 5.7.1 Client was not authenticated
DEBUG SMTP: got response code 530, with response: 530 5.7.1 Client was not authenticated.
Dlaczego miałoby to być, gdy sesja poświadczenie powodzenie?
można aktywować tryb debugowania , abyś mógł zobaczyć, co twoja aplikacja mówi do serwera SMPT, na końcu rozmowy powinieneś zobaczyć coś, co wskazuje na błąd. – Alex
Cześć Alex, dzięki! Włączyłem debugowanie i napisałem MAIL FROM: <[email protected]> 530 5.7.1 Klient nie został uwierzytelniony DEBUG SMTP: otrzymałem kod odpowiedzi 530, z odpowiedzią: 530 5.7.1 Klient nie został uwierzytelniony. Dlaczego miałoby to nastąpić po udanym uwierzytelnieniu sesji? – legendofawesomeness
Właśnie widziałem, że dla niektórych wersji programu Exchange użytkownik powinien mieć jeden z następujących formatów: "użytkownik @ domena" lub "domena \\ użytkownik", jeśli w międzyczasie może być przydatna. – Alex