本文是使用Java来发送邮件。涉及到以下知识技术:
SMTP协议
1. SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制邮件的中转方式。
2. SMTP协议属于TCP/IP协议簇,它帮助每台计算机在发送或中转信件时找到下一个目的地。
3. 通过SMTP协议所指定的服务器,就可以把E-mail寄到收信人的服务器上了,整个过程只要几分钟。
4. SMTP服务器则是遵循SMTP协议的发送邮件服务器,用来发送或中转发出的电子邮件。
5. SMTP协议默认端口号是25
POP3协议
1. POP3,全名为”Post Office Protocol-Version3”,即”邮局协议版本3”。
2. POP3协议属于TCP/IP协议簇,主要用于支持使用客户端远程管理在服务器上的电子邮件。
3. 通常把处理用户POP3请求(邮件接收请求)的邮件服务器称之为POP3服务器默认端口号:110.
邮件收发流程
代码实现
1. 硬件环境:Window8
2. 软件环境:jdk1.7.0.80、eclipse、maven3.5.2
3. Maven仓库地址:http://mvnrepository.com/
编写pom.xml文件
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.ck.javaSendMail</groupId>
<artifactId>javaSendMail</artifactId>
<version>0.0.1-SNAPSHOT</version>
<dependencies>
<!-- https://mvnrepository.com/artifact/com.sun.mail/javax.mail -->
<dependency>
<groupId>com.sun.mail</groupId>
<artifactId>javax.mail</artifactId>
<version>1.5.4</version>
</dependency>
<!-- https://mvnrepository.com/artifact/junit/junit -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.10</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
编写配置文件(config.properties)
#设置发送邮件需要身份验证
mail.smtp.auth=true
#设置发件人的邮箱服务器主机名
#mail.host=smtp.163.com
mail.host=smtp.qq.com
#开启debug调试模式
mail.debug=true
#发件人邮箱是否使用了ssl(qq邮箱是使用了ssl的)
#mail.smtp.ssl.enable=false
mail.smtp.ssl.enable=true
#设置发件人的信息
from.user=2771287337@qq.com
from.password=密码(这里改为自己的qq密码)
#设置收件人的信息
#to.user=2771287337@qq.com
#to.user=chuangke218@163.com
to.user=3244932549@qq.com
编写发送邮件的方法及测试方法
package com.ck.utils;
import java.util.Properties;
import javax.mail.Authenticator;
import javax.mail.Message;
import javax.mail.Message.RecipientType;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
/**
* 邮件工具类
* @author 52363
*
*/
public class MailUtils {
public static void sendMail() throws Exception{
//1.创建链接,链接到邮箱服务器
final Properties properties = new Properties();
properties.load(MailUtils.class.getResourceAsStream("/config.properties"));
Session session = Session.getDefaultInstance(properties, new Authenticator() {//匿名内部类
@Override
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(properties.getProperty("from.user"),
properties.getProperty("from.password"));
}
});
//2.创建邮件对象,写邮件
Message message = new MimeMessage(session);
message.setFrom(new InternetAddress(properties.getProperty("from.user")));//设置发件人
message.setRecipient(RecipientType.TO, new InternetAddress(properties.getProperty("to.user")));
message.setSubject("生日祝福");//设置邮件的主题
message.setContent("<h1>生日祝福</h1><p>祝你生日快乐!</p>", "text/html;charset=utf-8");
//3.发送邮件
Transport.send(message);
System.out.println("发送成功!");
}
public static void main(String[] args) throws Exception {
sendMail();
}
}
目录结构
总结
以上呢就是使用Java发送邮件的代码。我试过用网易的邮箱往QQ邮箱、QQ邮箱往网易邮箱以及QQ邮箱往QQ邮箱发邮件,都是可以的,不要忘了改配置文件中的信息,每次修改不只是修改用户名和密码,还要注意邮箱服务器那块的修改。
另外要注意的是,使用QQ邮箱来做发件人,需要开启QQ邮箱的POP3以及SMTP协议,而且腾讯要求使用QQ号绑定的手机发信息(qq邮箱的设置中会有提示),然后会返回一串授权码,在以上发邮件的代码中,发件人的密码就要用刚刚的那个授权码,而不能使用QQ号本身的密码。
源代码上传到了我贡献的资源中了,大家感兴趣可以去下载下来看~