JavaMail邮件发送。

 

项目结构

 

运行结果

 

 

邮件测试结果

 

 

不废话.直接代码解释.

需要自己在lib里面导入mail.jar包

源码里面已经有mail的相关jar。需要的同学可以单独下载。
mail.jar 项目源码
 

还有一点,如果你的163邮箱账户是刚刚申请的话,那么163是不会允许你通过这种方式发送邮件的。只有老用户才可以。

 

 

package com.sakura;

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.Properties;

import javax.activation.DataHandler;
import javax.activation.DataSource;
import javax.activation.FileDataSource;
import javax.mail.Address;
import javax.mail.Authenticator;
import javax.mail.Message;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.Message.RecipientType;
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;

//本文用UTF-8格式
public class sendEmailTest3 {
	public static void main(String[] args) throws Exception{
		Properties props=new Properties();//实例化一个Properties对象
		props.setProperty("mail.smtp.auth", "true");//设置是否校验.此处为true
		props.setProperty("mail.transport.protocol", "smtp");//设置传输协议
		props.setProperty("mail.host", "smtp.163.com");//设置smtp服务器.此处为163邮箱的smtp服务器。
		Session session=Session.getInstance(props,									//通过Session的静态方法getInstance传入上面的那个Properties对象
				new Authenticator() {												//从而获取一个session对象。
					protected PasswordAuthentication getPasswordAuthentication(){	//此处使用的是一种模式,叫策略模式。把一段能实现具体功能的代码
						return new PasswordAuthentication("10086","123456");	//封装到一个对象里面,调用对象的函数即等于调用了那一段代码
					}
				}
		);
		//如果不用上面的这种方法实例化session对象,也可以直接通过getInstance方法获取一个session对象。如:Session session=Session.getInstance(pros);
		//不过需要在下面实例化Transport对象。并且设置它的connect方法,传入邮箱账号和密码,如下:
		//Transport transport=session.getTransport();						//通过session的getTransport()方法获得Transport对象
		//transport.connect("smtp.163.com", 25, "10086", "123456");	//打开连接        参数信息:1.smtp服务器 2.端口号 3.用户名 4.密码
		
		session.setDebug(true);//设置输出debug信息。true为输出
		
		Message msg=new MimeMessage(session);//传入一个session对象,实例化一个Message对象,mes相当于一个邮件
		msg.setSubject("附件图片HTML测试");	//设置邮件标题
		msg.setFrom(new InternetAddress("10086@163.com"));//设置发送人的邮箱
		
		//第一个参数为设置收件人类型, 1.收件人格式TO是正常收件人 BCC暗送 CC抄送 2.收件人邮箱 此处是正常收件人 .第二个参数是设置收件人的邮箱,如果有中文,需要通过MimeUtility的encodeText进行编码
		msg.setRecipient(RecipientType.TO, new InternetAddress(MimeUtility.encodeText("一零零一零")+" <10010@qq.com>"));
		//如果想要群发,可以这样:用InternetAddress.parse方法,邮箱之间用逗号隔开,该方法会把你分开一个个邮箱。
		//msg.setRecipients(RecipientType.TO, InternetAddress.parse("10000@qq.com,10010@qq.com"));
		
		MimeMultipart msgMultipart=new MimeMultipart("mixed");//设置msgMultipart的关系, mixed混合关系,此处是把邮件分割成各个部分。附件部分和正文部分。用mixed混合模式。
		msg.setContent(msgMultipart);//把msg对象的内容,即邮件的内容设置为MimeMultipart对象。然后再处理补充MimeMultipart对象里面的内容即可。
		
		MimeBodyPart attch1=new MimeBodyPart();//实例化MimeBodyPart对象。此MimeBodyPart为附件1.用于实现附件1
		MimeBodyPart attch2=new MimeBodyPart();//实例化MimeBodyPart对象。此MimeBodyPart为附件2.用于实现附件2
		MimeBodyPart content=new MimeBodyPart();//实例化MimeBodyPart对象。此MimeBodyPart为正文内容.
		msgMultipart.addBodyPart(attch1);//把附件1MimeBodyPart对象加进MimeMultipart对象中。
		msgMultipart.addBodyPart(attch2);//把附件2MimeBodyPart对象加进MimeMultipart对象中。
		msgMultipart.addBodyPart(content);//把正文MimeBodyPart对象加进MimeMultipart对象中。MimeMultipart包含MimeBodyPart。MimeBodyPart里面也可以有MimeMultipart对象...以此类推。
		
		//此处处理附件1的MimeBodyPart对象信息。
		DataSource ds1=new FileDataSource("resource\\slogo.jpg");//实例化一个数据源。此处是工程下面的resource文件夹里面的slogo.jpg图片
		DataHandler dh1=new DataHandler(ds1);//实例化一个DataHandler对象来处理访问数据源
		attch1.setDataHandler(dh1);//给附件1的MimeBodyPart对象设置DataHandler设置文件名。
		attch1.setFileName("slogo.jpg");//给附件1的MimeBodyPart对象设置文件名,此处没有设置的话,不能成为一个附件。
		
		//继续处理附件2的MimeBodyPart对象信息。解释同上。
		DataSource ds2=new FileDataSource("resource\\Java.txt");
		DataHandler dh2=new DataHandler(ds2);
		attch2.setDataHandler(dh2);
		attch2.setFileName(MimeUtility.encodeText("Java.txt"));//此处有中文,所以需要进行编码,否则会出现乱码。
		
		//1
		MimeMultipart bodyMultipart=new MimeMultipart("related");//设置bodyMultipart的关系, related关联关系,如果你的正文里面没有带有图片,那么此处到下面//1的部分可以去掉
		content.setContent(bodyMultipart);
		
		MimeBodyPart htmlPart=new MimeBodyPart();//实例化一个MimeBodyPart对象。这是MimeBodyPart为html文本
		MimeBodyPart gifPart=new MimeBodyPart();//实例化一个MimeBodyPart对象。这是MimeBodyPart为文本内嵌图片
		bodyMultipart.addBodyPart(htmlPart);//加入到bodyMultipart对象里面去。
		bodyMultipart.addBodyPart(gifPart);//同上
		
		DataSource gifDs=new FileDataSource("resource\\logo.png");//同上附件注释
		DataHandler gifDh=new DataHandler(gifDs);
		gifPart.setDataHandler(gifDh);//此处为内嵌图片,可以不用设置文件名
		gifPart.setHeader("Content-ID", "<image>");//该处是给图片设置对应ID,从而在收邮件的时候可以正确显示图片。html文本处的图片src地址为\"cid:image\对应image
		//1
		//<img src=\"cid:image\">为图片链接。如果你的正文不需要图片,那么可以去掉该链接即可。同时把上面的//1 //1包括的代码去掉。把下面的htmlPart.setContent改成content.setContent即可
		htmlPart.setContent("<span style='color:red'>你好啊!看看这是什么东西</span><a href='http://www.baidu.com' target=_blank><img src=\"cid:image\"></a>", "text/html;charset=UTF-8");//设置编码格式UTF-8
		msg.saveChanges();//保存邮件,关键的一步
		
		Transport.send(msg);//此处用Transport的静态方法send发送邮件。里面包含了打开连接和关闭连接两个动作。
		
		//若不用静态方法也可以用下面的
		//Transport transport=session.getTransport();//通过session的getTransport()方法获得Transport对象
		//transport.connect("smtp.163.com", 25, "10086", "123456");//打开连接        参数信息:1.smtp服务器 2.端口号 3.用户名 4.密码   此处各种参数如果上面设置了,该处就不用设置了。
		//transport.sendMessage(msg, new Address[]{new InternetAddress("10010@qq.com")});//设置收件人邮箱并发送邮件,此处可以设置多个收件人,实例化多几个InternetAddress对象即可,如果上面设置了收件人此处也可以省略设置。
		//transport.close();//关闭连接
		
		//下面把该邮件弄成一个邮件文件。
//		OutputStream ops=new FileOutputStream("resource//demo3.eml");
//		msg.writeTo(ops);//通过msg对象的writeTo把数据写进demo3.eml文件
//		ops.close();//关闭输出流
	}
}
  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值