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"));
}
}