【问题标题】:Can't send e-mail via Gmail with Java无法使用 Java 通过 Gmail 发送电子邮件
【发布时间】:2014-10-23 07:51:42
【问题描述】:

我无法通过 Gmail 发送带有 java 代码的电子邮件。

代码:

import java.util.Properties;

import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;

public class b {

    public static void sendMessage(String to, String from, String subject, String text){



        Properties props = new Properties();
        props.put("mail.smtp.auth", "true");
        props.put("mail.smtp.starttls.enable", "false");
        props.put("mail.smtp.host", "smtp.gmail.com");
        props.put("mail.smtp.port", "587");
        props.put("mail.transport.protocol", "smtp");


        Session session = Session.getInstance(props, null);

        try {

            Message message = new MimeMessage(session);
            message.setRecipients(Message.RecipientType.TO,
                    InternetAddress.parse(to));
            message.setSubject(subject);
            message.setText(text);

            Transport transport = session.getTransport("smtp");
            String mfrom = "fromemail";
            transport.connect("smtp.gmail.com", mfrom, "fromemailpassword");
            transport.sendMessage(message, message.getAllRecipients());

            System.out.println("Done");

        } catch (MessagingException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

}

我得到错误:

javax.mail.MessagingException: 530 5.7.0 Must issue a STARTTLS command first. b3sm24500496wiw.22 - gsmtp

我正在尝试从 Gmail 帐户向 Gmail 帐户发送电子邮件,但没有成功。我需要为我的商务电子邮件执行此操作以发送新闻通讯等。

编辑:

我将一段代码改成这样:

        Properties properties = new Properties();
        properties.put("mail.smtp.host", "smtp.gmail.com");
        properties.put("mail.smtp.port", "25");
        properties.put("mail.smtp.auth", "true");   //make it true
        properties.put("mail.smtp.starttls.enable", "true"); //make it true
        properties.put("mail.smtp.ssl.trust", "smtp.gmail.com");
        //Authentication is needed use your gmail user and password"smtp.gmail.com"
        Authenticator auth = new Authenticator() {
            public PasswordAuthentication getPasswordAuthentication() {
                return new PasswordAuthentication("email@gmail.com", "password");
            }
        };
        Session session = Session.getInstance(properties, auth);

现在我得到了异常: javax.mail.AuthenticationFailedException

【问题讨论】:

标签: java email


【解决方案1】:

这样做

 Properties properties = new Properties();
 properties.put("mail.smtp.host", "smtp.gmail.com");
 properties.put("mail.smtp.port", "465");
 properties.put("mail.smtp.auth", "true");   //make it true
 properties.put("mail.smtp.starttls.enable", "true"); //make it true
 properties.put("mail.smtp.ssl.trust", "smtp.gmail.com");
 //Authentication is needed use your gmail user and password"smtp.gmail.com"
 Authenticator auth = new Authenticator() {
  public PasswordAuthentication getPasswordAuthentication() {
     return new PasswordAuthentication("yourGmailUserName", "yourGmailpassword");
     }
 };
 Session session = Session.getInstance(properties, auth);

【讨论】:

    【解决方案2】:

    我认为问题在于你的属性是矛盾的。

    您将 SMTP 端口设置为 587,它(根据 this page)是基于 TLS 的 SMTP 的服务器端口。但随后您将mail.smtp.starttls.enable 设置为false

    Google SMTP 服务器自然会感到困惑......它告诉您它希望客户端发送一个 STARTTLS 命令。

    解决方案:

    • mail.smtp.starttls.enable 属性更改为true

    • 或者,将mail.smtp.port 属性更改为465(SSL 端口)

    您无法选择使用“普通”SMTP ...如果您关心保护您的电子邮件流量,这是一件好事。


    根据this resource,您还需要启用身份验证。 (该页面有大量的 Java 示例代码...)

    【讨论】:

      【解决方案3】:

      starttls 应该是true

      表示添加:

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

      然后发给我那个工作与否?

      【讨论】:

        【解决方案4】:

        响应代码 530 表示拒绝访问

        随附的消息表明 gmail 需要 STARTTLS。 试试

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

        虽然它可能需要更多属性才能正常工作

        此外:非安全 SMTP 总是一个坏主意,除非它是本地的。

        【讨论】:

          猜你喜欢
          • 2013-02-03
          • 1970-01-01
          • 2016-09-26
          • 2011-10-16
          • 2020-02-21
          • 2019-02-04
          • 2020-05-30
          相关资源
          最近更新 更多