电子邮件的应用非常广泛,例如在某网站注册了一个账户,自动发送一封欢迎邮件,通过邮件找回密码,自动批量发送活动信息等。但这些应用不可能和我们自己平时发邮件一样,先打开浏览器,登录邮箱,创建邮件再发送。本文将简单介绍如何通过 Java 代码来创建电子邮件,并连接邮件服务器发送邮件。
现在,我们来先来了解一下电子邮件协议SMTP 是 Simple Mail Transfer Protocol 的简称,即简单邮件传输协议。电子邮件的在网络中传输和网页一样需要遵从特定的协议,常用的电子邮件协议包括 SMTP,POP3,IMAP。其中邮件的创建和发送只需要用到 SMTP协议,所以本文也只会涉及到SMTP协议。
我们再来了解一下开发javamail程序必备的jar包——javax.mail.jar,Java 官方提供了对电子邮件协议封装的 Java 类库,就是JavaMail,但并没有包含到标准的 JDK 中,需要我们自己去下载。
JavaMail 下载地址:https://github.com/javaee/javamail/releases
jar包下载好后,我们还需要有一个邮箱账号去发送,这里我们选用163邮箱为例子,邮箱账号必须要开启 SMTP 服务,在浏览器网页登录邮箱后一般在邮箱的“设置”选项中可以开启,并记下邮箱的 SMTP 服务器地址
下面我们就开始写java程序了。
首先创建一个 Java 工程,把下载好的javax.mail.jar作为类库加入工程。
下面介绍javaMail发送简单文本的实例:
package com.xx.javaMaildome;
import java.util.Date;
import java.util.Properties;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
public class Mail {
public static String myEmailAccount="*************@163.com";//我的账号
public static String myEmailPassword="***********";//账号密码
public static String myEmailSMTPHost="smtp.163.com";//发件人邮箱的 SMTP 服务器地址
public static String receiveMailAccount="***********@qq.com";//收件人邮箱
public static void main(String[] args)throws Exception
{
//1.创建参数配置,用于连接邮件服务器的参数配置
Properties properties=new Properties();
properties.setProperty("mail.transport.protocol", "smtp");//使用的协议(JavaMail规范要求)
properties.setProperty("mail.smtp.host", myEmailSMTPHost);//发件人的邮箱的 SMTP 服务器地址
properties.setProperty("mail.smtp.auth", "true");//需要请求认证
// 2. 根据配置创建会话对象, 用于和邮件服务器交互
Session session=Session.getInstance(properties);
session.setDebug(true);//设置为debug模式,可以查看详细的发送log
//3.创建一封邮件
MimeMessage message=createMimeMessage(session, myEmailAccount, receiveMailAccount);
//4.根据session获取邮件传输对象
Transport transport=session.getTransport();
transport.connect(myEmailAccount, myEmailPassword);
transport.sendMessage(message,message.getAllRecipients());
transport.close();//关闭连接
System.out.println("邮件发送成功");
}
/**
* 创建一封只包含文本的简单邮件
*
* @param session 和服务器交互的会话
* @param sendMail 发件人邮箱
* @param receiveMail 收件人邮箱
* @return
* @throws Exception
*/
private static MimeMessage createMimeMessage(Session session, String sendMail, String receiveMail)throws Exception {
// TODO Auto-generated method stub
MimeMessage message=new MimeMessage(session);//创建一封邮件
message.setFrom(new InternetAddress(sendMail, "邮件", "UTF-8"));//发件人
message.setRecipient(MimeMessage.RecipientType.TO,new InternetAddress(receiveMail, "Mary", "UTF-8"));//收件人
message.setSubject("解释","UTF-8");//邮件主题
message.setContent("这是用程序发送的邮件哦,不是在客户端上写的", "text/html;charset=utf-8");
message.setSentDate(new Date());
message.saveChanges();//保存设置
return message;}
}
以上就是发送javaMail发送简单文本的实例,在发送的过程中,出现问题的不是代码出错,而是邮件被作为垃圾邮件发布出去,被163的服务器拦截掉。然后就出现以下错误:
错误参考:http://mail.163.com/help/help_spam_16.htmip=221.224.54.186&hostid=smtp14&time=1512436245
解决办法:修改你发送的内容,比如我上面的内容,经过测试是可以发送成功的。
至此,简单的javaMail发送文本文件就完成了。