2015-06-19 4 views
5

Ich habe Java-Programm (kopiert von Google), um E-Mails mit Office365 SMTP zu senden, es funktioniert gut als ein Stand-Java-Programm, aber wenn ich dieses Java-Programm als JAR-Datei im Web bereitstellen -inf/lib einer Webanwendung und Aufruf der Methode von jsp führt zu folgendem Fehler: javax.mail.SendFailedException: Senden fehlgeschlagen; verschachtelte Ausnahme ist: javax.mail.MessagingException: 530 5.7.57 SMTP; Der Client wurde nicht authentifiziert, um anonyme E-Mails während des Sendens von MAIL FROMjavax.mail.MessagingException: 530 5.7.57 SMTP; Client wurde nicht authentifiziert, um anonyme Mail während MAIL senden VON

zu senden. Bitte teilen Sie uns Ihre Meinung zu diesem Problem mit.

Der Java-Code:

import java.util.Properties; 

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; 

import org.apache.log4j.Logger; 

public class SendEmailUsingSMTP { 


    public static boolean sendEmail(String toAddress, String fromAddress, String userName, String userPassword,String smtpHost, String portNumber, String emailSubject,String emailBody) { 
     // Recipient's email ID needs to be mentioned. 

     Logger log = Logger.getLogger(SendEmailUsingSMTP.class); 
     log.info("toAddress : "+toAddress); 
     log.info("fromAddress : "+fromAddress); 
     log.info("userName : "+userName); 
     log.info("userPassword : "+userPassword); 
     log.info("smtpHost : "+smtpHost); 
     log.info("portNumber : "+portNumber); 
     log.info("emailSubject : "+emailSubject); 
     log.info("emailBody : "+emailBody); 

     String to = toAddress; 

     // Sender's email ID needs to be mentioned 
     String from = fromAddress;//change accordingly 
     final String username = userName;//change accordingly 
     final String password = userPassword;//change accordingly 

     // Assuming you are sending email through relay.jangosmtp.net 
     String host = smtpHost; 

     Properties props = new Properties(); 

     props.put("mail.smtp.auth", "true"); 
     props.put("mail.smtp.socketFactory.fallback", "false"); 
     props.put("mail.smtp.starttls.enable", "true"); 
     props.put("mail.smtp.socketFactory.port", portNumber); 
     props.put("mail.smtp.host", host); 
     props.put("mail.smtp.port", portNumber); 

     // Get the Session object. 
     SMTPAuthenticator authenticator = new SMTPAuthenticator(username, password); 
     props.put("mail.smtp.submitter", authenticator.getPasswordAuthentication().getUserName()); 
     Session session = Session.getInstance(props, authenticator); 


     try { 
     // Create a default MimeMessage object. 
     Message message = new MimeMessage(session); 

     // Set From: header field of the header. 
     message.setFrom(new InternetAddress(from)); 

     // Set To: header field of the header. 
     message.setRecipients(Message.RecipientType.TO, 
     InternetAddress.parse(to)); 

     // Set Subject: header field 
     message.setSubject(emailSubject); 

     // Now set the actual message 
     message.setText(emailBody); 

     // Send message 
     Transport.send(message); 

     System.out.println("Sent message successfully...."); 

     } catch (MessagingException e) { 
      throw new RuntimeException(e); 
     } 
    return true; 
    } 
} 
+0

Die smtpHost, portNumber Ich verwende String smtpHost = "smtp.office365.com"; \t String portNumber = "587"; – Jay

+0

Ich bin genau gleich konfrontiert isuse ... –

Antwort

3

Sie mit der folgenden Konfiguration versuchen können, wie es für mich funktioniert:

"mail.smtp.starttls.enable":"true"

Auch ich verwendet host:

host = "Outlook.office365.com"

Hoffnung Das hilft dir oder jemand anderem.

+0

Ich habe das versucht. Aber die gleiche Ausnahme kommt wieder 530 5.7.57 SMTP; Client wurde nicht authentifiziert, um anonyme Mail während MAIL FROM zu senden – apm

0

Die smtp.starttls.enable auf true und der Host auf smtp.office365.com löste das ähnliche Problem für mich.

Getestet habe ich es mit Ihrem Code nur diese drei Eigenschaften mit:

props.put("mail.smtp.auth",true); 
props.put("mail.smtp.starttls.enable",true); 
props.put("mail.smtp.host", host); 

den Host: smtp.office365.com und ich konnte die E-Mails von meinem Konto gesendet.

Die ganze Funktion:

public static boolean sendEmail(String toAddress, String fromAddress, String userName, String userPassword,String smtpHost, String emailSubject,String emailBody) { 
     // Recipient's email ID needs to be mentioned. 


     String to = toAddress; 

     // Sender's email ID needs to be mentioned 
     String from = fromAddress;//change accordingly 
     final String username = userName;//change accordingly 
     final String password = userPassword;//change accordingly 

     // Assuming you are sending email through relay.jangosmtp.net 
     String host = smtpHost; 

     Properties props = new Properties(); 

     props.put("mail.smtp.auth",true); 
     props.put("mail.smtp.starttls.enable",true); 
     props.put("mail.smtp.host", host); 

     // Get the Session object. 
     SimpleMailAuthenticator authenticator = new SimpleMailAuthenticator(username, password); 
     Session session = Session.getInstance(props, authenticator); 


     try { 
     // Create a default MimeMessage object. 
     Message message = new MimeMessage(session); 

     // Set From: header field of the header. 
     message.setFrom(new InternetAddress(from)); 

     // Set To: header field of the header. 
     message.setRecipients(Message.RecipientType.TO, 
     InternetAddress.parse(to)); 

     // Set Subject: header field 
     message.setSubject(emailSubject); 

     // Now set the actual message 
     message.setText(emailBody); 

     // Send message 
     Transport.send(message); 

     System.out.println("Sent message successfully...."); 

     } catch (MessagingException e) { 
      throw new RuntimeException(e); 
     } 
    return true; 
    } 

und der Authenticator

class SimpleMailAuthenticator extends Authenticator { 


    String userName; 
    String password; 
    PasswordAuthentication authentication; 

    public SimpleMailAuthenticator(String userName,String password) { 
     super(); 
     this.userName = userName; 
     this.password = password;   
     authentication = new PasswordAuthentication(userName, password); 
    } 

    @Override 
    public PasswordAuthentication getPasswordAuthentication() { 
     return authentication; 
    } 


} 
0

setzen Sie bitte das unten X-Mailer als message.setHeader ("X-Mailer", "Ihr Anwendungsname") ;

Verwandte Themen