Java发送邮件

Java实现发送邮件

实现发送带有文本、图片和附件的邮件
需要的jar包

<dependency>
    <groupId>javax.mail</groupId>
    <artifactId>mail</artifactId>
    <version>1.4</version>
</dependency>

java代码

import java.util.Date;
import java.util.Properties;

import javax.activation.DataHandler;
import javax.activation.FileDataSource;
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;

public class TestUtil {
	//发送邮件
	public static void sendMail() {
		try {
			Session session = createSession();// 创建Session对象
			Message message = createMessage(session);// 创建Message对象
            Transport transport = session.getTransport();// 创建Transport对象
            /** 第一个参数是发邮件的邮箱,第二个参数是授权码在邮件客户端先开启POP3/SMTP服务然后获取。
             *	如果不开启服务,connect无法登录邮箱会报javax.mail.AuthenticationFailedException,身份验证失败异常
             */
            transport.connect("发邮件的邮箱","邮箱的授权码");
            transport.sendMessage(message, message.getAllRecipients());
            transport.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	//创建一个会话
	public static Session createSession() {
		Properties properties = new Properties();
		properties.put("mail.transport.protocol", "smtp");// 邮件传输协议
		properties.put("mail.host", "smtp.qq.com");// 主机名,用什么邮箱发邮件要设置对应的主机名,QQ邮箱:smtp.qq.com,163邮箱:smtp.163.com
		properties.put("mail.smtp.auth","true");// 设置邮件发送需要认证
		properties.put("mail.smtp.ssl.enable", "true");// 设置是否使用ssl安全连接
		properties.put("mail.debug", "true");// 设置是否显示debug信息 true 会在控制台显示相关信息
		Session session = Session.getInstance(properties);// 创建会话对象
		return session;
	}
	
	//创建要发送的邮件内容
	public static Message createMessage(Session session) throws Exception {
		Message message = new MimeMessage(session);// 创建消息对象
        message.setFrom(new InternetAddress("发件人邮箱"));// 设置发件人邮箱地址
        /**设置收件人
         * Message.RecipientType.TO 表示收件人
         * Message.RecipientType.CC 表示抄送
         *  Message.RecipientType.BCC 表示暗送
         */
        message.setRecipient(Message.RecipientType.TO, new InternetAddress("邮箱"));// 收件人邮箱
        //message.setRecipient(Message.RecipientType.CC, new InternetAddress("邮箱"));// 抄送人邮箱
        message.setSubject("主题是一封不知名的邮件");// 设置主题
        message.setSentDate(new Date());//设置发送时间,默认是立即发送
        
        /**发送4种不同的邮件
         * message对象的setContent方法只有最后一次的赋值生效会覆盖前面的,想要多种内容组合可以通过MimeBodyPart和MimeMultipart的使用
         * MimeBodyPart:保存数据的载体,可以保存文本、图片和保存了内容的MimeMultipart
         * MimeMultipart:类似容器用于存放保存数据的载体,通过setSubType方法描述与数据的关系
         * setSubType方法的参数代表混合MimeBodyPart的方法
         * mixed:混合关系,一般正文和附件组合使用mixed
         * related:关联关系,一般html引用了图片这类内嵌资源
         * alternative:同时存在纯文本与超文本
         */
        //1、只发送文本的邮寄
        message.setContent("正文是一段不知道说什么的文本", "text/html;charset=UTF-8");
        
        //2、发送带有图片的邮件
        MimeBodyPart mbp = new MimeBodyPart();
        mbp.setContent("这是一段带着不知道是什么图片的内容<br/><img src='cid:pic1.jpg'>", "text/html;charset=UTF-8");// <br/>是换行
        MimeBodyPart image = new MimeBodyPart();
        DataHandler dh = new DataHandler(new FileDataSource("图片路径"));
        image.setDataHandler(dh);                                                                                                                 
        image.setContentID("pic1.jpg");// 对应文本中img的cid
        MimeMultipart mmp = new MimeMultipart();
        mmp.addBodyPart(mbp);
        mmp.addBodyPart(image);
        mmp.setSubType("related");
        message.setContent(mmp);
        
        //3、发送带有附件的邮件
        MimeBodyPart text = new MimeBodyPart();
        MimeBodyPart text1 = new MimeBodyPart();
        text.setContent("这是一封带着不知道是什么附件的邮件", "text/html;charset=UTF-8");
        text1.setContent("<br/>这封邮件第二部分的内容", "text/html;charset=UTF-8");
        MimeBodyPart attach = new MimeBodyPart();
        DataHandler dh1 = new DataHandler(new FileDataSource("附件路径"));
        attach.setDataHandler(dh1);
        attach.setFileName(dh1.getName());
        MimeMultipart mp = new MimeMultipart();
        mp.addBodyPart(text);
        mp.addBodyPart(text1);
        mp.addBodyPart(attach);
        mp.setSubType("mixed");
        message.setContent(mp);
        
        //4、同时发送图片和附件
        MimeMultipart mp1 = new MimeMultipart();
        mp1.addBodyPart(attach);
        //mp1.addBodyPart(mbp);
        //mp1.addBodyPart(image);
        MimeBodyPart content = new MimeBodyPart();
        content.setContent(mmp);
        mp1.addBodyPart(content);//这3句相当于mp1.addBodyPart(mbp);和mp1.addBodyPart(image);的效果
        mp1.setSubType("mixed");
        message.setContent(mp1);
        
        return message;
	}
	
	public static void main(String[] args) {
		sendMail();
	}
}
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值