【Java】使用JavaMail发送qq邮件

 

因为需求,尝试了一下使用java向指定用户发送邮件,亲测有效,源码奉上!

准备工作:

下载JavaMail的jar包:https://mvnrepository.com/artifact/javax.mail/mail/1.4.7

开启邮件发送方IMAP/SMTP服务

开启后会获得授权码

什么是授权码?

授权码是QQ邮箱推出的,用于登录第三方客户端的专用密码。

适用于登录以下服务:POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务。

温馨提醒:为了你的帐户安全,更改QQ密码以及独立密码会触发授权码过期,需要重新获取新的授权码登录。

怎么获取授权码?

先进入设置-》帐户页面找到入口,按照以下流程操作。

(1)点击“开启”

(2)验证密保

(3)获取授权码

代码测试:

import java.util.Properties;

import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.Address;
import javax.mail.Message;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
import javax.mail.internet.MimeUtility;

import com.sun.mail.util.MailSSLSocketFactory;


public class MailTest {

    public static void main(String[] args) throws Exception {
    	
    	Properties props = new Properties();     
        // 开启debug调试
        props.setProperty("mail.debug", "true");
        // 发送服务器需要身份验证
        props.setProperty("mail.smtp.auth", "true");
        // 设置邮件服务器主机名
        props.setProperty("mail.host", "smtp.qq.com");
        // 发送邮件协议名称
        props.setProperty("mail.transport.protocol", "smtp");
     
        MailSSLSocketFactory sf = new MailSSLSocketFactory();
        sf.setTrustAllHosts(true);
        props.put("mail.smtp.ssl.enable", "true");
        props.put("mail.smtp.ssl.socketFactory", sf);
     
        // 根据propertise创建会话
        Session session = Session.getInstance(props);
        
        // 根据会话创建邮件信息
        Message msg = new MimeMessage(session);
        // 邮件主题
        msg.setSubject("JavaMail Test");
        
        //创建图片节点
        MimeBodyPart image = new MimeBodyPart();
        //读取本地文件
        DataHandler dataHandler = new DataHandler(new FileDataSource("src/lib/love.jpg"));
        //将图片添加至结点
        image.setDataHandler(dataHandler);
        //为"节点"设置一个唯一编号
        image.setContentID("pic");
        
        
        // 创建文本"节点"
        MimeBodyPart text = new MimeBodyPart();
        // 这里添加图片的方式是将整个图片包含到邮件内容中
        text.setContent("<br/><h2>我爱你<h2>"
        		+ "<a href='https://me.csdn.net/weixin_41978722'>网址链接测试</a>"
        		+ "<img src='cid:pic'/>", "text/html;charset=UTF-8");
        
        
        // 创建附件结点(源代码)
        MimeBodyPart attachment  = new MimeBodyPart();
        // 读取本地文件
        DataHandler dataHandler1 = new DataHandler(new FileDataSource("src/com/funyoo/mail/test/MailTest.java"));
        // 将文件添加至结点
        attachment.setDataHandler(dataHandler1);
        // 设置附件的文件名(需要编码)
        attachment.setFileName(MimeUtility.encodeText(dataHandler1.getName()));    
        
        
        // 创建附件结点(mail.jar包)
        MimeBodyPart jar  = new MimeBodyPart();
        // 读取本地文件
        DataHandler dataHandler2 = new DataHandler(new FileDataSource("src/lib/mail-1.4.7.jar"));
        // 将文件添加至结点
        jar.setDataHandler(dataHandler2);
        // 设置附件的文件名(需要编码)
        jar.setFileName(MimeUtility.encodeText(dataHandler2.getName()));    
        
        
        // 创建混合节点  将图片节点 文件结点 附件结点 加入
        MimeMultipart multipart = new MimeMultipart();
        multipart.addBodyPart(image);
        multipart.addBodyPart(text);
        multipart.addBodyPart(attachment);
        multipart.addBodyPart(jar);
        // 将混合节点加入邮件中
        msg.setContent(multipart);
        
        // 设置邮件发送方
        msg.setFrom(new InternetAddress("发送方邮箱地址"));
     
        // 开始会话传输
        Transport transport = session.getTransport();
        // 连接邮箱   加入自己(发送方)授权码      
        transport.connect("smtp.qq.com", "发送方邮箱地址", "授权码");
     
        // 给目标邮箱发送邮件
        transport.sendMessage(msg, new Address[] { new InternetAddress("收件方邮箱") });
        transport.close();
    }
}

结果:

 

 

全部评论

相关推荐

Pandaileee:校友加油我现在也只有一个保底太难了
点赞 评论 收藏
分享
粗心的雪碧不放弃:纯学历问题,我这几个月也是一直优化自己的简历,后来发现优化到我自己都觉得牛逼的时候,发现面试数量也没有提升,真就纯学历问题
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务