现在的位置: 首页 > 综合 > 正文

邮件附件乱码、设置邮件回复人、设置邮件发送人收件人姓名、发送现有的eml文件

2017年10月14日 ⁄ 综合 ⁄ 共 5361字 ⁄ 字号 评论关闭

IT程序员开发必备-各类资源下载清单,史上最全IT资源,个人收藏总结!

解决邮件附件乱码问题

 //为附件1关联数据源
	   DataSource ds1 = new FileDataSource("C:\\Documents and Settings\\Administrator\\桌面\\river.jpg");
	   DataHandler dh1 = new DataHandler(ds1);
	   attch1.setDataHandler(dh1);
	   //文件名必须要经过编码,否则附件名将乱码
	   attch1.setFileName(MimeUtility.encodeText("故乡的河.jpg"));

设置邮件回复人

      //设置发送人
       msg.setFrom(new InternetAddress(MimeUtility.encodeText("肖华")+"<xh216319@163.com>"));
       //设置答复人
       msg.setReplyTo(InternetAddress.parse("itstar1965@sina.com"));
       //设置收件人,并以友好名称显示
       msg.setRecipients(RecipientType.TO,InternetAddress.parse(
    	 MimeUtility.encodeText("ITSTAR")+"<itstar1965@sina.com>,"+MimeUtility.encodeText("肖华")+"<xh216319@163.com>")
    	);

设置邮件发送人收件人姓名

      //设置发送人
       msg.setFrom(new InternetAddress(MimeUtility.encodeText("肖华")+"<xh216319@163.com>"));
       //设置答复人
       msg.setReplyTo(InternetAddress.parse("itstar1965@sina.com"));
       //设置收件人,并以友好名称显示
       msg.setRecipients(RecipientType.TO,InternetAddress.parse(
    	 MimeUtility.encodeText("ITSTAR")+"<itstar1965@sina.com>,"+MimeUtility.encodeText("肖华")+"<xh216319@163.com>")
    	);

解决上述问题的完整程序

package edu.mail.util;

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.Properties;
import javax.activation.DataHandler;
import javax.activation.DataSource;
import javax.activation.FileDataSource;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.Message.RecipientType;
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 SendMultipartMessageDemo3 {

	public static void main(String[] args) throws MessagingException, IOException {

	   Properties props = new Properties();
	   Session session = Session.getInstance(props);
	   session.setDebug(true);
       Message msg = new MimeMessage(session);
       msg.setSubject("the first multipart javaMail");
       //设置发送人
       msg.setFrom(new InternetAddress(MimeUtility.encodeText("肖华")+"<xh216319@163.com>"));
       //设置答复人
       msg.setReplyTo(InternetAddress.parse("itstar1965@sina.com"));
       //设置收件人,并以友好名称显示
       msg.setRecipients(RecipientType.TO,InternetAddress.parse(
    	 MimeUtility.encodeText("ITSTAR")+"<itstar1965@sina.com>,"+MimeUtility.encodeText("肖华")+"<xh216319@163.com>")
    	);
       
	   MimeMultipart msgMultipart = new MimeMultipart("mixed");
	   msg.setContent(msgMultipart);
	   //为message对象创建content组件和attch组件
	   MimeBodyPart content = new MimeBodyPart();
	   MimeBodyPart attch1 = new MimeBodyPart();
	   MimeBodyPart attch2 = new MimeBodyPart();
       //将两个附件对象和正文对象添加到msgMultipart对象
	   msgMultipart.addBodyPart(content);
	   msgMultipart.addBodyPart(attch1);
	   msgMultipart.addBodyPart(attch2);
	   
	   //为附件1关联数据源
	   DataSource ds1 = new FileDataSource("C:\\Documents and Settings\\Administrator\\桌面\\river.jpg");
	   DataHandler dh1 = new DataHandler(ds1);
	   attch1.setDataHandler(dh1);
	   //文件名必须要经过编码,否则附件名将乱码
	   attch1.setFileName(MimeUtility.encodeText("故乡的河.jpg"));
	   //为附件2关联数据源
	   DataSource ds2 = new FileDataSource("C:\\Documents and Settings\\Administrator\\桌面\\mail.bat");
	   DataHandler dh2 = new DataHandler(ds2);
	   attch2.setDataHandler(dh2);
	   attch2.setFileName("mail.bat");
	   //因为正文content也是一个Multipart对象,其组件是related关系,所以content.setContent(contentMultipart)
	   MimeMultipart contentMultipart = new MimeMultipart("related");
	   content.setContent(contentMultipart);
	   //为contentMultipart创建htmlPart组件和gifPart组件
	   MimeBodyPart htmlPart = new MimeBodyPart();
	   MimeBodyPart gifPart = new MimeBodyPart();
	   //将htmlPart和gifPart对象添加到contentMultipart对象
	   contentMultipart.addBodyPart(htmlPart);
	   contentMultipart.addBodyPart(gifPart);
	   
	   DataSource ds3 = new FileDataSource("C:\\Documents and Settings\\Administrator\\桌面\\2012_03130103.JPG");
	   DataHandler dh3 = new DataHandler(ds3);
	   gifPart.setDataHandler(dh3);
	   gifPart.setFileName("itstar.gif");
	   gifPart.setHeader("Content-Location", "http://www.csdn.net/itstar.gif");
	   //这里src="http://www.csdn.net/itstar.gif"实际上指向的是其关联的gifPart对象
	   htmlPart.setContent("这是我的第一个复合结构的JavaMail,我的照片<img height=100px,width=80px src='http://www.csdn.net/itstar.gif'/>","text/html;charset=utf-8");
	   //保存message所做的改变
	   msg.saveChanges();
	   OutputStream ops = new FileOutputStream("C:\\Documents and Settings\\Administrator\\桌面\\SendMultipartMessageDemo3.eml");
         //将message对象写入文件流中
	   msg.writeTo(ops);
	   ops.close();
	}

}

发送现有的eml文件

package edu.mail.util;

import java.io.FileInputStream;
import java.util.Date;
import java.util.Properties;

import javax.mail.Authenticator;
import javax.mail.Message;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.Message.RecipientType;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;

public class SendEmlFileDemo4 {

	public static void main(String[] args) throws Exception {
		//创建包含邮件服务器的网络连接信息的Session对象。
			   Properties props = new Properties();
			   props.setProperty("mail.transport.protocol", "smtp");
			   props.setProperty("mail.host", "smtp.163.com");
			   props.setProperty("mail.smtp.auth", "true");
			   /**
			    * getInstance()和getDefaultInstance()方法的区别:
			    * getInstance()每次调用都会创建一个新Session对象并返回
			    * getDefaultInstance()第一次调用时,会返回一个session对象,并将该session对象设置为缺省值,当第二次调用该方法时,则会返回该缺省session对象
			    **/
			   //因为Authenticator类为抽象类,所以只能以匿名内部类的形式new一个Authenticator的子类对象,并重写其getPasswordAuthentication()方法
		       Session session = Session.getInstance(props,
		    	   new Authenticator() {
		    	     protected PasswordAuthentication getPasswordAuthentication(){
		    	    	 return new PasswordAuthentication("xh216319","xiaoxiao");
		    	     }
				}
		       );
		       //设置Debug的方式打印执行过程
		       session.setDebug(true);
		     //创建代表邮件内容的Message对象。
			  Message msg = new MimeMessage(session,new FileInputStream("C:\\Documents and Settings\\Administrator\\桌面\\SendMultipartMessageDemo3.eml"));
			   
		      Transport.send(msg);
			}

}

抱歉!评论已关闭.