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