使用javamail发送qq邮件

一、QQ邮箱准备

在QQ邮箱设置中,开启POP3/SMTP服务,并生成授权码

二、新建项目


1.新建项目并引入javax.mail的jar包,这里给出maven的配置

<dependency>
    <groupId>javax.mail</groupId>
    <artifactId>mail</artifactId>
    <version>1.4.7</version>
</dependency>
2.贴出项目代码

package mail;
import java.security.GeneralSecurityException;
import java.util.Properties;

import javax.mail.Authenticator;
import javax.mail.Message.RecipientType;
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 com.sun.mail.util.MailSSLSocketFactory;

/**
 * 发送邮件的测试程序
 * 
 * @author lwq
 * 
 */
public class MailTest {

    public static void main(String[] args) throws MessagingException {
        // 配置发送邮件的环境属性
        final Properties props = new Properties();
        /*
         * 可用的属性: mail.store.protocol / mail.transport.protocol / mail.host /
         * mail.user / mail.from
         */
        // 表示SMTP发送邮件,需要进行身份验证
        props.put("mail.smtp.auth", "true");
        props.put("mail.smtp.host", "smtp.qq.com");
        props.put("mail.smtp.port", "465");
        // 发送邮件协议名称
        props.setProperty("mail.transport.protocol", "smtp");
        //创建ssl安全链接
        MailSSLSocketFactory sf;
		try {
			sf = new MailSSLSocketFactory();
			sf.setTrustAllHosts(true);
	        props.put("mail.smtp.ssl.enable", "true");
	        props.put("mail.smtp.ssl.socketFactory", sf);
		} catch (GeneralSecurityException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}        
        // 发件人的账号
        props.put("mail.user", "******@qq.com");
        // 访问SMTP服务时需要提供的密码
        props.put("mail.password", "授权码-16 ");

        // 构建授权信息,用于进行SMTP进行身份验证
        Authenticator authenticator = new Authenticator() {
            @Override
            protected PasswordAuthentication getPasswordAuthentication() {
                // 用户名、密码
                String userName = props.getProperty("mail.user");
                String password = props.getProperty("mail.password");
                return new PasswordAuthentication(userName, password);
            }
        };
        // 使用环境属性和授权信息,创建邮件会话
        Session mailSession = Session.getInstance(props, authenticator);
        // 创建邮件消息
        MimeMessage message = new MimeMessage(mailSession);
        // 设置发件人
        InternetAddress form = new InternetAddress(
                props.getProperty("mail.user"));
        message.setFrom(form);

        // 设置收件人
        InternetAddress to = new InternetAddress("*********@qq.com");
        message.setRecipient(RecipientType.TO, to);

        // 设置抄送
        InternetAddress cc = new InternetAddress("luo_aaaaa@yeah.net");
        message.setRecipient(RecipientType.CC, cc);

        // 设置密送,其他的收件人不能看到密送的邮件地址
        InternetAddress bcc = new InternetAddress("aaaaa@163.com");
        message.setRecipient(RecipientType.CC, bcc);

        // 设置邮件标题
        message.setSubject("测试");

        // 设置邮件的内容体
        message.setContent("9999999999", "text/html;charset=UTF-8");

        // 发送邮件
        Transport.send(message);
    }
}

三、注意的问题


1.代码中的邮箱密码并不是QQ密码,而是授权码


2.之前参考的网易邮箱代码,总是出现javax.mail.AuthenticationFailedException: 220 Ready to start TLS的错误,需要在代码中加入ssl安全链接的代码


3.腾讯给出了两个的端口号,建议使用465端口


4.jdk版本问题,总是抛出异常Could not connect to SMTP host: smtp.qq.com, port: 465;

这个问题的详细描述为:MessagingException: Could not connect to SMTP host: smtp.qq.com, port: 465;
nested exception is: javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure
而后在网上查找到了简书上的一篇资料:http://www.jianshu.com/p/5ba3bde60f21
大抵是由于jdk1.8里面有一个jce包,由于安全性的问题访问https时会报错,我们在官网上找到可替代的包替换掉即可,或者把jdk换成1.7版本的。下载地址:
http://www.oracle.com/technetwork/java/javase/downloads/jce-7-download-432124.html
解压完后里面有两个jar包,我们在jdk目录下按照 jdk\jre\lib\security路径,将里面原有的两个包替换掉即可。

5.相关参考链接
http://blog.csdn.net/qq422733429/article/details/51280020
http://blog.csdn.net/never_cxb/article/details/50543289
http://blog.csdn.net/xkhbear/article/details/53450344

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值