JavaMail

Javamail遵循两个协议,一个是smtp协议,另一个是pop3协议。一般情况下把处理smtp请求(用户发送请求)的邮件服务器称之为smtp服务器。而把处理pop3(接收)请求的邮件服务器称之为pop3服务器。


在javamail中数据有三种关系,分别为mixed,related和alternative。两部分数据必须要设置其中的关系,mixed是没关系的关系,比如正文和附件,二者没有关系;related是引用关系,比如在正文中引用图片;alternative是二者选其一。


javamail中几个重要的类,MimeMessage、MimeMultipart和MimeBodyPart。

MimeMessage表示整封邮件。

MimeMultipart表示一个由多个mime消息组成的组合mime消息。

MimeBodyPart表示一个邮件的mime消息。

多个MimeBodyPart对象可以封装到MimeMultipart对象中,而多个MimeMultipart对象又可以封装 MimeMessage对象中。


javamail中的中文乱码现象:

可能出现中文的地方有主题、正文、附件名(别告诉我还有文件名,这个是自己弄的,你要弄成中文那也是作了),首先,主题的中文不会乱码,不用考虑了;正文中的乱码可以指定编码;而最麻烦的要属附件名了,这个要用到mime的工具类(MimeUtility),调用里面的encodeText()方法,解决乱码问题。


下面再附加一个小例子吧:

package mail;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.Properties;

import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Session;
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 Mail3 {
	public static void main(String[] args) throws AddressException, MessagingException, IOException {
		
		Session session = Session.getDefaultInstance(new Properties());
		MimeMessage message = new MimeMessage(session);
		message.setFrom(new InternetAddress("xx@qq.com"));
		message.setRecipient(Message.RecipientType.TO, new InternetAddress("yy@qq.com"));
		message.setSubject("Mail1");

		// 准备正文数据
		MimeBodyPart text = new MimeBodyPart();
		text.setContent("这是第一<img src='cid:yyy.jpg'>封邮件!!", "text/html;charset=UTF-8");//解决正文乱码

		// 准备图片
		MimeBodyPart part = new MimeBodyPart();
		DataHandler dh = new DataHandler(new FileDataSource("src\\7.jpg"));
		part.setDataHandler(dh);
		part.setContentID("yyy.jpg");

		// 准备附件
		MimeBodyPart attach = new MimeBodyPart();
		DataHandler dh1 = new DataHandler(new FileDataSource("src\\美女.zip"));
		attach.setDataHandler(dh1);
		attach.setFileName(MimeUtility.encodeText(dh1.getName()));//解决附件名乱码
		
		//描述关系
		//正文和图片
		MimeMultipart mp1 = new MimeMultipart();
		mp1.addBodyPart(text);
		mp1.addBodyPart(part);
		mp1.setSubType("related");
		
		MimeBodyPart mb = new MimeBodyPart();
		mb.setContent(mp1);
		
		//正文和附件
		MimeMultipart mp2 = new MimeMultipart();
		mp2.addBodyPart(text);
		mp2.addBodyPart(attach);
		mp2.addBodyPart(mb);
		mp2.setSubType("mixed");
		
		message.setContent(mp2);
		message.saveChanges();
		
		message.writeTo(new FileOutputStream("d:/3.eml"));
	}
}







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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值