javamail掌握发邮件

  1. javamail 能支持一般的邮件协议:SMTP,pop3,IMAP等;
    - 顺便说一下pop3(post office protocol 3)为规定怎样将个人计算机连接到Internet的邮件服务器和下载电子邮件的电子协议。pop3允许用户从服务器上把邮件存储到本地,同时删除保存在邮件服务器上的邮件。(服务器地址imap.163.com 非ssl协议端口号143)
    - SMTP(simple mail transfer protocol)通过它来控制邮件的中转方式,帮助每台计算机在发送或中转信件时找到下一个目的地。(服务器地址smtp.163.com 非ssl协议端口号25)
    - IMAP (Internet mail access protocol )在客户端收到 的电子邮件在依然保存在服务器上,同时客户端对邮件的操作会反馈到服务器上。(服务器地址pop.163.com 非ssl协议端口号110)

  2. javamail 常见4个核心类:
    1. message类:创建和解析邮件的核心api
    2. transport类:发送邮件的核心api
    3. store类:接收邮件的核心api
    4. session类: 定义整个应用程序所需的环境信息,已及收集客户端与邮件服务器建立网络连接的会话信息。
    在这里插入图片描述

  3. javamail发送邮件

public class EmailSend {
	public static void main(String[] args) {
		//得到环境属性配置对象
		final Properties pros=new Properties();
		//设置发送邮件服务器
		pros.put("mail.smtp.host", "smtp.qq.com");
		//设置端口
		//pros.put("mail.smtp.port", 25);
		//验证身份
		pros.put("mail.smtp.auth", "true");
		//设置发送邮件账户
		pros.put("mail.userName", "1459322526@qq.com");
		//访问服务器提供的密码
		pros.put("mail.userPwd", "vtemtmisojdoggdj");
		//pros.put("mail.userPwd", "peng9364");
		//新建邮箱会话
		Session ss=Session.getInstance(pros);
		//ss.setDebug(true);
		//验证
		Authenticator authenticator=new Authenticator(){
	         protected PasswordAuthentication getPasswordAuthentication() {
	            return new PasswordAuthentication("xxx@qq.com","(qq的认证码)");
	         }
	    };   
		//新建消息对象
		Message message=new MimeMessage(ss);
		
		try {
			//邮件发送方
			InternetAddress from=new InternetAddress("xxx@qq.com");
			message.setFrom(from);
			
			//邮件接收
			InternetAddress to=new InternetAddress("xxx@163.com");
			message.setRecipient(Message.RecipientType.TO, to);
			// 设置邮件发送的主题<邮件标题>
			message.setSubject("邮件来啦!!!");
			// 设置邮件发送的内容
			message.setContent("收到了没!!","text/html;charset=utf-8");
			
			
			Transport tran=ss.getTransport("smtp");
			tran.connect("smtp.qq.com", "xxx@qq.com", "vtemtmisojdoggdj");
			tran.sendMessage(message, message.getAllRecipients());;
			tran.close();
			
			System.out.println("发送成功");
		} catch (MessagingException e) {
			System.out.println("发送失败");
			e.printStackTrace();
		}
	}
	public static MimeMessage createMimeMessage(Session session, String sendMail, String receiveMail) throws Exception {
        // 1. 创建邮件对象
        MimeMessage message = new MimeMessage(session);
 
        // 2. From: 发件人
        message.setFrom(new InternetAddress(sendMail, "发送人名", "UTF-8"));
 
        // 3. To: 收件人(可以增加多个收件人、抄送、密送)
        message.addRecipient(RecipientType.TO, new InternetAddress(receiveMail, "收件人名", "UTF-8"));
 
        // 4. Subject: 邮件主题
        message.setSubject("测试java发送邮件(图片+文档)", "UTF-8");
 
        /*
         * 下面是邮件内容的创建:
         */
 
        // 5. 创建图片“节点”
        MimeBodyPart image = new MimeBodyPart();
        DataHandler dh = new DataHandler(new FileDataSource("WebContent/images/3.jpg")); // 读取本地文件
        image.setDataHandler(dh);                   // 将图片数据添加到“节点”
        image.setContentID("image_fairy_tail");     // 为“节点”设置一个唯一编号(在文本“节点”将引用该ID)
 
        // 6. 创建文本“节点”
        MimeBodyPart text = new MimeBodyPart();
        //    这里添加图片的方式是将整个图片包含到邮件内容中, 实际上也可以以 http 链接的形式添加网络图片
        text.setContent("这是一张图片<br/><img src='cid:image_fairy_tail'/>", "text/html;charset=UTF-8");
 
        // 7. (文本+图片)设置 文本 和 图片 “节点”的关系(将 文本 和 图片 “节点”合成一个混合“节点”)
        MimeMultipart mm_text_image = new MimeMultipart();
        mm_text_image.addBodyPart(text);
        mm_text_image.addBodyPart(image);
        mm_text_image.setSubType("related");    // 关联关系
 
        // 8. 将 文本+图片 的混合“节点”封装成一个普通“节点”
        //    最终添加到邮件的 Content 是由多个 BodyPart 组成的 Multipart, 所以我们需要的是 BodyPart,
        //    上面的 mm_text_image 并非 BodyPart, 所有要把 mm_text_image 封装成一个 BodyPart
        MimeBodyPart text_image = new MimeBodyPart();
        text_image.setContent(mm_text_image);
 
        // 9. 创建附件“节点”
        MimeBodyPart attachment = new MimeBodyPart();
        DataHandler dh2 = new DataHandler(new FileDataSource("WebContent/doc/开发规范.docx"));  // 读取本地文件
        attachment.setDataHandler(dh2);                                             // 将附件数据添加到“节点”
        attachment.setFileName(MimeUtility.encodeText(dh2.getName()));              // 设置附件的文件名(需要编码)
 
        // 10. 设置(文本+图片)和 附件 的关系(合成一个大的混合“节点” / Multipart )
        MimeMultipart mm = new MimeMultipart();
        mm.addBodyPart(text_image);
        mm.addBodyPart(attachment);     // 如果有多个附件,可以创建多个多次添加
        mm.setSubType("mixed");         // 混合关系
 
        // 11. 设置整个邮件的关系(将最终的混合“节点”作为邮件的内容添加到邮件对象)
        message.setContent(mm);
 
        // 12. 设置发件时间
        message.setSentDate(new Date());
 
        // 13. 保存上面的所有设置
        message.saveChanges();
 
        return message;
    }
}


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值