JavaMail API - 使用Java通过Gmail SMTP发送电子邮件

本教程将帮助您使用Java通过远程SMTP服务器发送电子邮件,如Gmail发送电子邮件。用于发送电子邮件使用本教程javax.mail(JavaMail的)API

JavaMail API支持发送电子邮件JavaMail(javax.mail)接口。它提供了类包,如Gmail验证,sendgrid等,以从远程SMTP服务器发送电子邮件。 在本文中,我们使用JavaMail API使用Java编程语言通过远程SMTP服务器发送电子邮件。这篇文章的例子中使用Gmail SMTP服务器作为邮件发送一个远程SMTP服务器。

第1步:安装JavaMail环境

首先我们需要下载包含javax.mail所有类的jar文件。从Oracle官方网站下载JAR( mail.jar)文件。 现在系统环境中设置类路径。 Windows用户请确认您已经配置PATH变量为你的Java安装路径。 Windows:
c:> set classpath=mail.jar;.;
Linux:
# export JAVA_HOME=/opt/jdk1.8.0_05/
# export PATH=$PATH:$JAVA_HOME/bin
# export CLASSPATH=$JAVA_HOME/jre/lib/ext:$JAVA_HOME/lib/tools.jar:mail.jar:.

第2步:写一个Java程序发送电子邮件

创建一个包含以下内容的Java文件SendMail.java。在这个脚本,你需要改变很多设置,根据您的设置。该脚本可以被用于通过通过Gmail的SMTP服务器TLS或SSL SMTP连接发送电子邮件。
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 javax.mail.internet.AddressException;

public class SendMail {

public static void main(String[] args) throws Exception{

final String smtp_host = "smtp.gmail.com";
final String smtp_username = "myuser@gmail.com";
final String smtp_password = "_email_password_";
final String smtp_connection = "TLS"; // Use ‘TLS’ or ‘SSL’ connection

final String toEmail="recipient@example.com";
final String fromEmail="sender@example.com";

Properties props = new Properties();
props.put("mail.smtp.auth", "true");

if (smtp_connection.equals("TLS")) {
props.put("mail.smtp.starttls.enable", "true");
props.put("mail.smtp.port", "587");
} else{
props.put("mail.smtp.socketFactory.port", "465");
props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
props.put("mail.smtp.port", "465");
}

Session session = Session.getInstance(props,
new javax.mail.Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(smtp_username, smtp_password);
}
});

try {
Message msg = new MimeMessage(session);
msg.setFrom(new InternetAddress(fromEmail, "NoReply"));
msg.addRecipient(Message.RecipientType.TO,
new InternetAddress(toEmail, "Mr. Recipient"));
msg.setSubject("Welcome To JavaMail API");
msg.setText("JavaMail API Test – Sending email example through remote smtp server");
Transport.send(msg);
System.out.println("Email sent successfully…");
} catch (AddressException e) {
throw new RuntimeException(e);
} catch (MessagingException e) {
throw new RuntimeException(e);
}
}
}

第3步:执行程序发送电子邮件

最后,我们需要执行Java程序来发送电子邮件。我们知道,需要两步来操作,首先要编译程序,其次运行它。
# javac SendMail.java
# java SendMail