javax.mail.MessagingException:530 5.7.57 SMTP;在MAIL FROM

时间:2015-06-19 06:20:32

标签: java

我有java程序(从谷歌复制)使用office365 SMTP发送电子邮件,它作为一个站点java程序工作正常,但当我在Web应用程序的web-inf / lib中部署这个java程序作为jar文件并调用来自jsp的方法是抛出以下错误: javax.mail.SendFailedException:发送失败;   嵌套异常是:     javax.mail.MessagingException:530 5.7.57 SMTP;客户端未通过身份验证,无法在MAIL FROM

期间发送匿名邮件

有人可以就此问题分享他们的观点。

java代码:

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;
   }
}

4 个答案:

答案 0 :(得分:8)

您可以尝试使用以下配置,因为它适用于我:

  

" mail.smtp.starttls.enable":"真"

另外,我使用了主持人:

  

host =" Outlook.office365.com"

希望这可以帮助你或其他人。

答案 1 :(得分:1)

smtp.starttls.enable设置为true,将主机设置为smtp.office365.com解决了类似的问题。

我仅使用这3个属性对您的代码进行了测试:

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

主持人:smtp.office365.com我可以从我的帐户发送电子邮件。

整个功能:

  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;
   }

和验证者

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;
    }


}  

答案 2 :(得分:0)

请设置以下内容 X-Mailer为message.setHeader(" X-Mailer","您的应用程序名称");

答案 3 :(得分:0)

所以,如果有人遇到类似问题:---

" javax.mail.MessagingException:530 5.7.57 SMTP;客户端未经过身份验证,无法在MAIL FROM期间发送匿名邮件。

在Linux操作系统上使用时,只需执行以下步骤: - 使用sudo编辑默认的jenkins文件,因为它是只读文件。

sudo vim / etc / default / jenkins

并添加以下两行: -

JAVA_ARGS =" -Xmx2048m -XX:MaxPermSize = 512m -Djava.awt.headless = true"

JAVA_ARGS =" -Djava.awt.headless = true -Dmail.smtp.starttls.enable = true"

编辑/追加文件后,重新启动Jenkins。 命令: - sudo /etc/init.d/Jenkins restart

现在测试您的配置,希望您将成功发送电子邮件