javaMail(三)-------发送发杂的邮件

package itat.org.zttc.mail;


import java.io.UnsupportedEncodingException;
import java.util.Properties;


import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.Message;
import javax.mail.Message.RecipientType;
import javax.mail.Authenticator;
import javax.mail.MessagingException;
import javax.mail.Multipart;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.AddressException;
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;


public class TestMail03 {
	public static void main(String[] args) {
		try {
			Properties props = new Properties();
			props.setProperty("mail.transport.protocol", "smtp");
			/**
			 * 设置发送邮件的服务器,不同的邮箱服务器不一致,可以在邮箱的帮助中查询
			 */
			props.setProperty("mail.host", "smtp.sina.com");
			/**
			 * 设置发送服务器验证,一些邮箱需要增加这个验证才能发送邮件
			 */
			props.setProperty("mail.smtp.auth", "true");
			/**
			 * 当需要使用Transport.send发送时,需要将用户名和密码设置到Session中
			 */
			Session session = Session.getDefaultInstance(props,new Authenticator
() {
				/**
				 * 通过Authenticator中 的getPasswordAuthentication的方法来设置
                                 *邮箱的用户名和密码
				 */
				@Override
				protected PasswordAuthentication getPasswordAuthentication()
 {
					return new PasswordAuthentication("kh_itat", 
"kh1234");
				}
			});
			
			session.setDebug(true);
			
			Message msg = new MimeMessage(session);
			/**
			 * 使用MimeUtility.encodeText可以将中文编码
			 */
			msg.setFrom(new InternetAddress(MimeUtility.encodeText("java培训")
+"<kh_itat@sina.com>"));
			msg.setRecipient(RecipientType.TO,new InternetAddress(
MimeUtility.encodeText("学员")+"<ynkonghao@gmail.com>"));
			msg.setSubject("一封邮件");
			
			/**
			 * 创建整个邮件的Multipart,因为邮件的内容已经不仅仅只是纯文本或者
                         *纯html文本,而需要添加
			 * 相应的附件,此时就得通过Multipart来创建
			 */
			Multipart emailPart = new MimeMultipart();
			/**
			 * Multipart不能直接加入内容,需要通过BodyPart来加入内容,
                         *假设有两个附件就需要三个BodyPart
			 * 两个用来存储附件,一个用来存储邮件的正文
			 */
			MimeBodyPart att1 = new MimeBodyPart();
			/**
			 * 为第一个附件设置文件,DataHandler是在JAF包中,如果使用的是jdk1.4的版本
                         *需要手动下载这个包
			 */
			att1.setDataHandler(new DataHandler(
new FileDataSource("d:/user.log")));
			att1.setFileName("user.log");
			/**
			 * 创建了第二个附件
			 */
			MimeBodyPart att2 = new MimeBodyPart();
			att2.setDataHandler(new DataHandler(
new FileDataSource("d:/order.jsp")));
			//要解决中文的问题需要通过一个MimeUtility这个类来编码中文
			att2.setFileName(MimeUtility.encodeText("测试.jsp"));
			
			MimeBodyPart content = new MimeBodyPart();
			/**
			 * 由于文件的正文还有图片和内容,所以也需要通过Multipart来创建
			 */
			MimeMultipart contentMultipart = new MimeMultipart();
			/**
			 * 然后再创建相应的BodyPart来设置内容
			 */
			MimeBodyPart imgBody = new MimeBodyPart();
			/**
			 * 创建了正文中的图片内容
			 */
			imgBody.setDataHandler(new DataHandler(
new FileDataSource("d:/02.jpg")));
			/**
			 * 为这个图片设置一个id,在正文中可以通过cid:xxx来访问
			 */
			imgBody.setContentID("smile");
			
			MimeBodyPart htmlBody = new MimeBodyPart();
			htmlBody.setContent("<h1>这个是一个带有附件的图片</h1>
<img src='cid:smile'/>", "text/html;charset=utf-8");
			
			
			contentMultipart.addBodyPart(imgBody);
			contentMultipart.addBodyPart(htmlBody);
			//完成了邮件正文的设置
			content.setContent(contentMultipart);
			
			/**
			 * 设置邮件的信息
			 */
			//添加第一个附件
			emailPart.addBodyPart(att1);
			//添加第二个附件
			emailPart.addBodyPart(att2);
			//添加邮件正文
			emailPart.addBodyPart(content);
			//设置邮件的信息
			msg.setContent(emailPart);
			
			Transport.send(msg);
		} catch (AddressException e) {
			e.printStackTrace();
		} catch (MessagingException e) {
			e.printStackTrace();
		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
		}
		
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱coding的同学

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值