使用Java发送邮件

来源:互联网 发布:淘宝卖家二维码生成 编辑:程序博客网 时间:2024/06/05 03:25

本文是使用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.commail.host=smtp.qq.com#开启debug调试模式mail.debug=true#发件人邮箱是否使用了ssl(qq邮箱是使用了ssl的)#mail.smtp.ssl.enable=falsemail.smtp.ssl.enable=true#设置发件人的信息from.user=2771287337@qq.comfrom.password=密码(这里改为自己的qq密码)#设置收件人的信息#to.user=2771287337@qq.com#to.user=chuangke218@163.comto.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号本身的密码。
源代码上传到了我贡献的资源中了,大家感兴趣可以去下载下来看~

原创粉丝点击