JavaMail

来源:互联网 发布:北上广深 知乎 编辑:程序博客网 时间:2024/06/07 23:51

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()方法,解决乱码问题。


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

[java] view plain copy
  1. package mail;  
  2.   
  3. import java.io.FileNotFoundException;  
  4. import java.io.FileOutputStream;  
  5. import java.io.IOException;  
  6. import java.io.UnsupportedEncodingException;  
  7. import java.util.Properties;  
  8.   
  9. import javax.activation.DataHandler;  
  10. import javax.activation.FileDataSource;  
  11. import javax.mail.Message;  
  12. import javax.mail.MessagingException;  
  13. import javax.mail.Session;  
  14. import javax.mail.internet.AddressException;  
  15. import javax.mail.internet.InternetAddress;  
  16. import javax.mail.internet.MimeBodyPart;  
  17. import javax.mail.internet.MimeMessage;  
  18. import javax.mail.internet.MimeMultipart;  
  19. import javax.mail.internet.MimeUtility;  
  20.   
  21. public class Mail3 {  
  22.     public static void main(String[] args) throws AddressException, MessagingException, IOException {  
  23.           
  24.         Session session = Session.getDefaultInstance(new Properties());  
  25.         MimeMessage message = new MimeMessage(session);  
  26.         message.setFrom(new InternetAddress("xx@qq.com"));  
  27.         message.setRecipient(Message.RecipientType.TO, new InternetAddress("yy@qq.com"));  
  28.         message.setSubject("Mail1");  
  29.   
  30.         // 准备正文数据  
  31.         MimeBodyPart text = new MimeBodyPart();  
  32.         text.setContent("这是第一<img src='cid:yyy.jpg'>封邮件!!""text/html;charset=UTF-8");//解决正文乱码  
  33.   
  34.         // 准备图片  
  35.         MimeBodyPart part = new MimeBodyPart();  
  36.         DataHandler dh = new DataHandler(new FileDataSource("src\\7.jpg"));  
  37.         part.setDataHandler(dh);  
  38.         part.setContentID("yyy.jpg");  
  39.   
  40.         // 准备附件  
  41.         MimeBodyPart attach = new MimeBodyPart();  
  42.         DataHandler dh1 = new DataHandler(new FileDataSource("src\\美女.zip"));  
  43.         attach.setDataHandler(dh1);  
  44.         attach.setFileName(MimeUtility.encodeText(dh1.getName()));//解决附件名乱码  
  45.           
  46.         //描述关系  
  47.         //正文和图片  
  48.         MimeMultipart mp1 = new MimeMultipart();  
  49.         mp1.addBodyPart(text);  
  50.         mp1.addBodyPart(part);  
  51.         mp1.setSubType("related");  
  52.           
  53.         MimeBodyPart mb = new MimeBodyPart();  
  54.         mb.setContent(mp1);  
  55.           
  56.         //正文和附件  
  57.         MimeMultipart mp2 = new MimeMultipart();  
  58.         mp2.addBodyPart(text);  
  59.         mp2.addBodyPart(attach);  
  60.         mp2.addBodyPart(mb);  
  61.         mp2.setSubType("mixed");  
  62.           
  63.         message.setContent(mp2);  
  64.         message.saveChanges();  
  65.           
  66.         message.writeTo(new FileOutputStream("d:/3.eml"));  
  67.     }  
  68. }  
原创粉丝点击