Javamail不与Gmail SMTP一起工作



尝试使用Javamail从我的Java代码发送电子邮件时,我会得到异常。我正在尝试使用Gmail SMTP(SSL,端口465)。TLS作品(端口587)。

这是我在做的。

mailServerProperties = System.getProperties();    
mailServerProperties.put("mail.smtp.port", "465");
mailServerProperties.put("mail.smtp.auth", "true");
mailServerProperties.put("mail.smtp.socketFactory.port", "465");
mailServerProperties.put("mail.smtp.socketFactory.class",
                        "javax.net.ssl.SSLSocketFactory");

getMailSession = Session.getDefaultInstance(mailServerProperties, null);
generateMailMessage = new MimeMessage(getMailSession);
generateMailMessage.addRecipient(Message.RecipientType.TO, new InternetAddress(ei.getToaddr()));
generateMailMessage.setFrom(new InternetAddress(ei.getUser()));
generateMailMessage.setSubject(ei.getSubject());
generateMailMessage.setText(ei.getMessage());
transport = getMailSession.getTransport("smtp");
transport.connect("smtp.gmail.com", "user", "password");

获得此例外...

2017-10-01 06:53:51.094 UTC SEVERE: 2542: EnhancedEmailer.generateAndSendEmail: Exception sending email
Could not connect to SMTP host: smtp.gmail.com, port: 465, response: -1
javax.mail.MessagingException: Could not connect to SMTP host: smtp.gmail.com, port: 465, response: -1
    at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:2042)
    at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:697)

任何属性看起来都错了吗?

请按照以下步骤:

  1. 在您的电子邮件中禁用"两个因素身份验证"
  2. 导航到:" https://myaccount.google.com/lesssecureapps?pli=1",然后打开"访问较低的安全应用程序"
  3. 下载javamail api" https://www.oracle.com/technetwork/java/javamail/javamail/index-138643.html"

代码

import java.util.Properties;
import javax.mail.Message;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
public class email_try {

    public static void main(String ap[]) {

      String myEmail = "YOUR EMAIL";
      String password = "YOUR PASSWORD";
      String opponentEmail = "THEIR EMAIL";
      Properties pro = new Properties();
      pro.put("mail.smtp.host", "smtp.gmail.com");
      pro.put("mail.smtp.starttls.enable", "true");
      pro.put("mail.smtp.auth", "true");
      pro.put("mail.smtp.port", "587");
      Session ss = Session.getInstance(pro, new javax.mail.Authenticator() {
       @Override
       protected PasswordAuthentication getPasswordAuthentication() {
        return new PasswordAuthentication(myEmail, password);
       }
      });

    try {
       Message msg = new MimeMessage(ss);
       msg.setFrom(new InternetAddress(myEmail));
       msg.setRecipients(Message.RecipientType.TO, InternetAddress.parse(opponentEmail));
       msg.setSubject("Your Wish");
       msg.setText("java email app");
       Transport trans = ss.getTransport("smtp");
       Transport.send(msg);
       System.out.println("message sent");
      } catch (Exception e) {
       System.out.println(e.getMessage());
      }
 }
}

//尝试此代码,并放置正确的电子邮件ID和密码

检查BLEW属性对我有效

props.put("mail.smtp.host", "smtp.gmail.com"); //SMTP Host
        props.put("mail.smtp.socketFactory.port", "465"); //SSL Port
        props.put("mail.smtp.socketFactory.class",
                "javax.net.ssl.SSLSocketFactory"); //SSL Factory Class
        props.put("mail.smtp.auth", "true"); //Enabling SMTP Authentication
                props.put("mail.smtp.starttls.enable", "true");
        props.put("mail.smtp.port", "465"); //SMTP Port
                props.put("mail.smtp.ssl.enable", "true");

我也认为您的代码中缺少以下属性

props.put("mail.smtp.ssl.enable", "true");

请参阅链接到生成应用程序的密码。https://devanswers.co/create-application-percific-password-gmail/

然后尝试

Properties props = new Properties();
     props.setProperty("mail.transport.protocol", "smtp");     
        props.setProperty("mail.host", "smtp.gmail.com");  
        props.put("mail.smtp.auth", "true");  
        props.put("mail.smtp.port", "465");  
        props.put("mail.debug", "true");  
        props.put("mail.smtp.socketFactory.port", "465");  
        props.put("mail.smtp.socketFactory.class","javax.net.ssl.SSLSocketFactory");  
        props.put("mail.smtp.socketFactory.fallback", "false"); 
        Session session = Session.getDefaultInstance(props,
                new javax.mail.Authenticator() {
            protected PasswordAuthentication getPasswordAuthentication() {
                return new PasswordAuthentication(user,appPass);
            }
        }
        );
        try {
            Message message = new MimeMessage(session);
            message.setFrom(new InternetAddress(username));
            message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(to));
            message.setSubject(subject);
            message.setText(body);
            Transport.send(message);
        } catch (Exception e) {
          e.printStackTrace();
        }

最新更新