-1

我想使用 Gmail 的 SMTP 服务器发送邮件。你能告诉我为什么当我运行下面的代码时它不会连接到服务器。

import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.MimeMessage;

public class SendTrick {

  public static void main(String[] args) {
    Properties props = new Properties();
    props.put("mail.smtp.host", "465");
    props.put("mail.from", "example@gmail.com");
    props.put("mail.smtp.host", "smtp.gmail.com");
    Session session = Session.getInstance(props, null);

    try {
        MimeMessage msg = new MimeMessage(session);
        msg.setFrom();
        msg.setRecipients(Message.RecipientType.TO,
                          "ex@gmail.com");
        msg.setSubject("JavaMail hello world example");
        msg.setText("Hello, world!\n");
        Transport.send(msg);
    } catch (MessagingException mex) {
        System.out.println("send failed, exception: " + mex);
    }
  }
} 

日志中的异常是

发送失败,异常:javax.mail.MessagingException:无法连接到 SMTP 主机:smtp.gmail.com,端口:25;嵌套异常是:java.net.ConnectException:连接被拒绝:连接

4

2 回答 2

4

您没有设置 a mail.smtp.port,因为该属性上存在重复拼写错误mail.smtp.host,因此使用默认端口 25,如异常中所述。

GMail 的 SMTP 未在端口 25 上运行,这就是连接被拒绝的原因。从在邮件客户端中设置 POP 中,它看起来应该是 465 或 587,所以你有一个有效的值,但属性键不正确。

编辑:

您需要为端口使用正确的属性键:

props.put("mail.smtp.port", "465"); // <-- use the word "port", not "host"

修复此问题后,您可能还会发现身份验证问题,正如评论中已经指出的那样,除非您故意遗漏了javax.mail.Authenticator问题中的代码。

编辑2:

正如我所提到的,您可能需要指定其他属性才能成功通过 SMTP 服务器进行身份验证和授权,例如:

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

但是,由于您使用端口 465 进行 SSL 连接,您还需要指定其他 SSL 属性,例如mail.smtp.socketFactory.class.

于 2012-10-12T12:59:23.180 回答
0

请按照以下步骤操作:

  1. 在您的电子邮件中禁用“双因素身份验证”
  2. 导航到:“ https://myaccount.google.com/lesssecureapps?pli=1 ”并打开“访问不太安全的应用程序”
  3. 下载 JavaMail API“ https://www.oracle.com/technetwork/java/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 和密码</p>

于 2018-10-08T15:12:38.693 回答