无法通过Gmail使用Java发送电子邮件

时间:2014-08-29 09:58:48

标签: java email

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

CODE:

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

4 个答案:

答案 0 :(得分:0)

starttls应为true

表示添加:

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

然后告诉我工作与否?

答案 1 :(得分:0)

回复代码530表示拒绝访问

随附的消息表明gmail期待STARTTLS。 试试

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

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

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

答案 2 :(得分:0)

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

您正在将SMTP端口设置为587,其中(根据this page)是SMTP over TLS的服务器端口。但是,您将mail.smtp.starttls.enable设置为false

当然,谷歌SMTP服务器很混乱......它告诉你它希望客户端发送一个STARTTLS命令。

解决方案:

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

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

你没有选择使用" vanilla" SMTP ...如果您关心保护电子邮件流量,这是一件好事。


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

答案 3 :(得分:0)

这样做

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