使用Java发送邮件

本文是使用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号本身的密码。
源代码上传到了我贡献的资源中了,大家感兴趣可以去下载下来看~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值