java接收邮件乱码_Java邮件开发(三):解决附件名为乱码
及显⽰友好名称
1.附件的名称只能为英⽂,中⽂乱码
2.友好名称的显⽰。
我们使⽤163等邮箱发送邮件时,我们经常可以看到收件⼈⼀栏中会是:张益达 这种⽅式。在上⼀版本的代码中并没有使⽤这样的⽅式。下⾯解决这两个问题
1. 对于中⽂乱码,是因为邮件要求所有的字符必须是ascII字符,中⽂字符当然不可以。因此我们只需要把我们的中⽂全部转码就可以了。⽽JavaMail提供了这样⼀个类:MimeUtility。使⽤这个类的encodeText⽅法就可以对中⽂进⾏编码。
2. 对于显⽰友好名称,我们⾸先要了解收件⼈填写时的格式。格式⼀般为:友好名称 ,如果有多个收件⼈要以逗号分割
如:张益达sohu ,张益达qq <554077931@qq>,张益达163
h.demo;
import java.io.FileInputStream;
import java.io.FileOutputStream;
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.Message.RecipientType;
import javax.mail.Address;
import javax.mail.Multipart;
import javax.mail.Session;
import javax.mail.Transport;
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;
import javax.mail.util.ByteArrayDataSource;
/**
* 创建⼀个复杂的邮件,这个邮件包括⼀段正⽂和两个附件
* 其中正⽂要包含⼀张图⽚
* @author Administrator
*
*/
public class Demo4 {
public static void main(String[] args) throws Exception {
Properties props = new Properties();
props.setProperty("mail.smtp.auth", "true");
props.setProperty("ansport.protocol", "smtp");
Session session = Instance(props);
session.setDebug(true);
Message msg = new MimeMessage(session);
/
*邮件消息头设置*/
//使⽤deText()⽅法对中⽂进⾏编码(base64或QP)
msg.setFrom(new InternetAddress("\"" + deText("张益达sss") + "\" "));
msg.setReplyTo(new Address[]{new InternetAddress("zyh5540@163")});
//友好名称和邮箱地址之间不要忘了有⼀空格,邮箱地址之间⽤逗号分隔
//如:张益达sohu ,张益达qq <554077931@qq>,张益达163
msg.setRecipients(RecipientType.TO,InternetAddress.deText("张益达sohu") + " ," + deText("张益达qq") + " <554077931@qq>,"
+ deText("张益达sina") + " ,"
+ deText("张益达163") + " "));
msg.setSubject("From 163 这是⼀封复杂邮件");
/*邮件消息内容设置,包括两个附件和⼀段正⽂*/
Multipart msgPart = new MimeMultipart("mixed");
msg.setContent(msgPart);
MimeBodyPart body = new MimeBodyPart(); //表⽰正⽂
MimeBodyPart attach1 = new MimeBodyPart(); //表⽰附件1
MimeBodyPart attach2 = new MimeBodyPart(); //表⽰附件2
msgPart.addBodyPart(body);
msgPart.addBodyPart(attach1);
msgPart.addBodyPart(attach2);
/*以下为设置正⽂*/
/*正⽂是⽂字和图⽚混合的*/
Multipart contentPart = new MimeMultipart("related");
body.setContent(contentPart);
MimeBodyPart content = new MimeBodyPart(); //⽂字
MimeBodyPart img = new MimeBodyPart(); //图⽚
contentPart.addBodyPart(content);
contentPart.addBodyPart(img);
DataSource fileds = new ByteArrayDataSource(new FileInputStream("D:\\picture\\jpg\\touxiang.jpg"),"image/jpeg"); DataHandler imgDataHandler = new DataHandler(fileds);
img.setDataHandler(imgDataHandler);
img.setHeader("Content-ID", "");
img.deText("头像.jpg"));
//设置⽂字内容
content.setContent("
从163发来的邮件
:我这⾥有⼀张图⽚,好看吗?", "text/html;charset=utf-8");
/*正⽂内容设置结束*/
/*下⾯为设置附件*/
attach1.setDataHandler(new DataHandler(new FileDataSource("E:\\others\\")));
attach1.deText("⽂件1.txt"));
attach2.setDataHandler(new DataHandler(new FileDataSource("E:\\others\\")));
attach2.deText("file⽂件2.txt"));
msg.saveChanges();
OutputStream os = new FileOutputStream("E:\\l");
msg.writeTo(os);
os.close();
Transport trans = Transport();
trans.sendMessage(AllRecipients());
}
}

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。