导航:首页 > 编程语言 > javamail中文附件

javamail中文附件

发布时间:2023-09-23 04:31:47

java 代码发邮件怎么添加附件

实现java发送邮件的过程大体有以下几步:

准备一个properties文件,该文件中存放SMTP服务器地址等参数。

利用properties创建一个Session对象

利用Session创建Message对象,然后设置邮件主题和正文

利用Transport对象发送邮件

需要的jar有2个:activation.jar和mail.jar发送附件,需要用到Multipart对象。

importjava.io.File;
importjava.io.IOException;
importjava.io.InputStream;
importjava.util.Properties;

importjavax.activation.DataHandler;
importjavax.activation.DataSource;
importjavax.activation.FileDataSource;
importjavax.mail.BodyPart;
importjavax.mail.Message;
importjavax.mail.MessagingException;
importjavax.mail.Multipart;
importjavax.mail.Session;
importjavax.mail.Transport;
importjavax.mail.internet.InternetAddress;
importjavax.mail.internet.MimeBodyPart;
importjavax.mail.internet.MimeMessage;
importjavax.mail.internet.MimeMultipart;
importjavax.mail.internet.MimeUtility;

{
privateMimeMessagemessage;
privateSessionsession;
privateTransporttransport;

privateStringmailHost="";
privateStringsender_username="";
privateStringsender_password="";

privatePropertiesproperties=newProperties();

/*
*初始化方法
*/
publicJavaMailWithAttachment(booleandebug){
InputStreamin=JavaMailWithAttachment.class.getResourceAsStream("MailServer.properties");
try{
properties.load(in);
this.mailHost=properties.getProperty("mail.smtp.host");
this.sender_username=properties.getProperty("mail.sender.username");
this.sender_password=properties.getProperty("mail.sender.password");
}catch(IOExceptione){
e.printStackTrace();
}

session=Session.getInstance(properties);
session.setDebug(debug);//开启后有调试信息
message=newMimeMessage(session);
}

/**
*发送邮件
*
*@paramsubject
*邮件主题
*@paramsendHtml
*邮件内容
*@paramreceiveUser
*收件人地址
*@paramattachment
*附件
*/
publicvoiddoSendHtmlEmail(Stringsubject,StringsendHtml,StringreceiveUser,Fileattachment){
try{
//发件人
InternetAddressfrom=newInternetAddress(sender_username);
message.setFrom(from);

//收件人
InternetAddressto=newInternetAddress(receiveUser);
message.setRecipient(Message.RecipientType.TO,to);

//邮件主题
message.setSubject(subject);

//向multipart对象中添加邮件的各个部分内容,包括文本内容和附件
Multipartmultipart=newMimeMultipart();

//添加邮件正文
BodyPartcontentPart=newMimeBodyPart();
contentPart.setContent(sendHtml,"text/html;charset=UTF-8");
multipart.addBodyPart(contentPart);

//添加附件的内容
if(attachment!=null){
BodyPartattachmentBodyPart=newMimeBodyPart();
DataSourcesource=newFileDataSource(attachment);
attachmentBodyPart.setDataHandler(newDataHandler(source));

//网上流传的解决文件名乱码的方法,其实用MimeUtility.encodeWord就可以很方便的搞定
//这里很重要,通过下面的Base64编码的转换可以保证你的中文附件标题名在发送时不会变成乱码
//sun.misc.BASE64Encoderenc=newsun.misc.BASE64Encoder();
//messageBodyPart.setFileName("=?GBK?B?"+enc.encode(attachment.getName().getBytes())+"?=");

//MimeUtility.encodeWord可以避免文件名乱码
attachmentBodyPart.setFileName(MimeUtility.encodeWord(attachment.getName()));
multipart.addBodyPart(attachmentBodyPart);
}

//将multipart对象放到message中
message.setContent(multipart);
//保存邮件
message.saveChanges();

transport=session.getTransport("smtp");
//smtp验证,就是你用来发邮件的邮箱用户名密码
transport.connect(mailHost,sender_username,sender_password);
//发送
transport.sendMessage(message,message.getAllRecipients());

System.out.println("sendsuccess!");
}catch(Exceptione){
e.printStackTrace();
}finally{
if(transport!=null){
try{
transport.close();
}catch(MessagingExceptione){
e.printStackTrace();
}
}
}
}

publicstaticvoidmain(String[]args){
JavaMailWithAttachmentse=newJavaMailWithAttachment(true);
Fileaffix=newFile("c:\测试-test.txt");
se.doSendHtmlEmail("邮件主题","邮件内容","[email protected]",affix);//
}
}

Ⅱ 有关javamail的邮件附件的路径和文件名中文乱码问题

你可以试试javamail包中自复带的编码解码制方法
import javax.mail.internet.MimeUtility; 包
// 解决文件名的中文问题
MimeUtility.decodeText(“attachment”);
// 解决标题的中文问题
MimeUtility.encodeText(”subject“);
这两个方法应该可以解决你的问题,我就是用的这两个方法

Ⅲ Javamail发送附件,为什么将附件内容直接显示在邮件正文中

DataSource source = new FileDataSource(new File("E:\\path.txt"));
body.setDataHandler(new DataHandler(source));
你好,复在后面在加上附制件文件名的设置:
body.setFileName(MimeUtility.encodeText(文件名));//设置附件文件名
例如:
body.setFileName(MimeUtility.encodeText(new File("E:\\path.txt").getName()));

ps:邮箱会根据附件的MIME类型自动打开附件,设置一个文件名可以将附件流控制成文件,不让邮箱自动打开

Ⅳ 关于javamail读取中文路径和文件名乱码的问题

你的这行代码attachName=new String(attachName.getBytes("gb2312"),"ISO8859-1");应该修改成attachName=new String(attachName.getBytes("ISO8859-1"),"gb2312");还有就是邮件中文乱码问题。在界面传递时,中文通过一定编码格式编码后在传给另外一个界面,接收界面如果要正确的显示中文,应该正确的解码。可以使用jdk1.6提供MimeUtility类。将 FileDataSource fds=new FileDataSource(filename);修改为:
FileDataSource fds=new FileDataSource(MimeUtility.encodeText(filename));这样的话应该能解决附件乱码问题。这只是自己肤浅的认识,可能有些地方还有漏洞,往高手看后指点!!
=====================================================================
下面是敝人一段中文处理的代码,可以做参考
public class Demo3
{
/**
* 复杂邮件含附件+中文附件名_回信地址_友好名称
* @param args
*/
public static void main(String[] args) throws Exception
{

//配置环境
Properties pros = new Properties();
pros.setProperty("mail.smtp.auth", "true");
pros.setProperty("mail.transport.protocol", "smtp");
Session session = Session.getInstance(pros);
session.setDebug(true);
//创建卫星
Message msg = new MimeMessage(session);
//设置msg的一些信息--发件人、主题、内容..
msg.setFrom(new InternetAddress("\""+MimeUtility.encodeText("超越")+"\" <[email protected]>"));
msg.setRecipients(RecipientType.TO,
InternetAddress.parse(MimeUtility.encodeText("毕老师")+" <[email protected]>,"+MimeUtility.encodeText("王老师")+" <[email protected]>")
);
msg.setReplyTo(InternetAddress.parse("[email protected]"));

MimeMultipart bodyMultipart = new MimeMultipart("mixed");
msg.setContent(bodyMultipart);

MimeBodyPart appurt1 = new MimeBodyPart();
MimeBodyPart appurt2 = new MimeBodyPart();
MimeBodyPart contentPart = new MimeBodyPart();

bodyMultipart.addBodyPart(appurt1);
bodyMultipart.addBodyPart(appurt2);
bodyMultipart.addBodyPart(contentPart);

appurt1.setDataHandler(new DataHandler(new FileDataSource("")));
appurt1.setFileName("");//重要

appurt2.setDataHandler(new DataHandler(new FileDataSource("")));
appurt2.setFileName("");

MimeMultipart contentMultipart = new MimeMultipart("related");
contentPart.setContent(contentMultipart);

MimeBodyPart picPart = new MimeBodyPart();
MimeBodyPart htmlPart = new MimeBodyPart();
contentMultipart.addBodyPart(picPart);
contentMultipart.addBodyPart(htmlPart);

picPart.setDataHandler(new DataHandler(new FileDataSource("")));
picPart.setHeader("Content-Location", "www.sohu.com/log.jpg");
htmlPart.setText("图片<img src=www.sohu.com/log.jpg/>", "text/html;charset=gbk");

msg.saveChanges();

//创建火箭
Transport transport = session.getTransport();
transport.connect("smtp.sina.com", 25, "[email protected]", "*****");

//火箭发送卫星
transport.sendMessage(msg, InternetAddress.parse("aa,aaa"));

transport.close();
}
}

Ⅳ JavaMail中如何判断邮件有附件的问题

判断附件可用如下方法:
disp.equals(Part.ATTACHMENT)//真为附件
你怎么确认一个 part 就一定是 MimeMultipart,它可能是 Single part 呢,比如 MimePart, 建议你用 eclipse 这样的开发工具查看一个 Part 的所以子类有哪些,知道它们的继承层次之后问题就很简单了。

Ⅵ javamail接收邮件时怎样能像163那样,在邮件正文下面显示都有什么附件

如下是我之前做的用javamail发送邮件(包含附件,且附件是html网页形式)的范例,我稍微修改了下,你参考参考,希望可以帮到你,我之前是发给OutLook的,没有发给163试过,不过我想应该差别不是很大,你试试:
import java.util.*;
import javax.mail.*;
import javax.mail.internet.*;
import javax.naming.*;
import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import com.tbcn.ceap.party.User;
import com.tbcn.ceap.party.custom.bizOper.UserpropertyBizOper;

InternetAddress[] address = null;
String mailTo = "";
boolean sessionDebug = false;
try {
// 设定所要用的Mail 伺服器和所使用的传送协定
java.util.Properties props = System.getProperties();
props.put("mail.host","接收Mail的服务器地址或名称");
props.put("mail.transport.protocol","smtp"); // <=设定所使用的protocol为SMTP(Small Mail Transfer Protocol)
// 产生新的Session 服务
javax.mail.Session mailSession = javax.mail.Session.getDefaultInstance(props,null);
mailSession.setDebug(sessionDebug);
Message msg = new MimeMessage(mailSession);
// 设定传送邮件的发信人
//msg.setFrom(new InternetAddress("想要显示的发件人名称"));
msg.setFrom(new InternetAddress("发件人地址"));
// 设定传送邮件至收信人的信箱
address = InternetAddress.parse("收件人",false);
msg.setRecipients(Message.RecipientType.TO, address);
// 设定信中的主题
msg.setSubject("邮件主题","big5");
// 设定送信的时间
msg.setSentDate(new Date());

//设定信件内容
String newMailBody = new String();
BodyPart mdp = new MimeBodyPart();
mdp.setContent("邮件内容", "text/html;charset=UTF-8");
Multipart mm = new MimeMultipart();
mm.addBodyPart(mdp);
msg.setContent(mm);

//设定附件信息
if(附件内容字串!=null){
mdp=new MimeBodyPart();
try{
DataHandler dh = new DataHandler(附件内容字串,"text/html;charset=UTF-8");
mdp.setDataHandler(dh);
FileDataSource fds = new FileDataSource("附件名字.html");
mdp.setFileName(new String(fds.getName().getBytes("utf-8"),"iso8859-1"));
}catch(Exception ex){
print("message_1--------------"+ex);
}
mm.addBodyPart(mdp);
msg.setContent(mm);
}
// 送信
Transport transport=mailSession.getTransport("smtp");
try{
transport.send(msg);
}catch(Exception ex1){
print("message_1--------------"+ex1);
}
}catch(MessagingException mex){
mex.printStackTrace();
}

Ⅶ JavaMail怎么彻底解决发送出的邮件中 附件名 乱码问题 MimeUtility.encodeText(fileName1)这个方法不顶用

这样可以解决,试试吧:回答:

BodyPart bp = new MimeBodyPart();
int indexof =filename.lastIndexOf("/");

String fileNameNew=MimeUtility.encodeText(filename.substring(indexof),"utf-8",null);
DataSource dataSourse=new FileDataSource(filename);
bp.setDataHandler(new DataHandler(dataSourse));
bp.setFileName(fileNameNew);

mp.addBodyPart(bp);

Ⅷ 如何使用javamail 接收含有图片和附件的唷考

参考代码如下:
import javax.mail.*;
import java.util.*;
import java.io.*;

public class ReceiveMail {

//处理任何一种邮件都需要的方法
private void handle(Message msg) throws Exception {
System.out.println("邮件主题:" + msg.getSubject());
System.out.println("邮件作者:" + msg.getFrom()[0].toString());
System.out.println("发送日期:" + msg.getSentDate());
}

//处理文本邮件
private void handleText(Message msg) throws Exception {
this.handle(msg);
System.out.println("邮件内容:"+msg.getContent());
}

//处理Multipart邮件,包括了保存附件的功能
private static void handleMultipart(Message msg) throws Exception {
String disposition;
BodyPart part;

Multipart mp = (Multipart) msg.getContent();
//Miltipart的数量,用于除了多个part,比如多个附件
int mpCount = mp.getCount();
for (int m = 0; m < mpCount; m++) {
this.handle(msg);
part = mp.getBodyPart(m);
disposition = part.getDisposition();
//判断是否有附件
if (disposition != null && disposition.equals(Part.ATTACHMENT))
{
//这个方法负责保存附件
saveAttach(part);
} else {
//不是附件,就只显示文本内容
System.out.println(part.getContent());
}
}
}

private static void saveAttach(BodyPart part) throws Exception {
//得到未经处理的附件名字
String temp = part.getFileName();
//除去发送邮件时,对中文附件名编码的头和尾,得到正确的附件名
//(请参考发送邮件程序SendMail的附件名编码部分)
String s = temp.substring(8, temp.indexOf("?="));
//文件名经过了base64编码,下面是解码
String fileName = base64Decoder(s);
System.out.println("有附件:" + fileName);

InputStream in = part.getInputStream();
FileOutputStream writer = new FileOutputStream(new File(
"保存附件的本地路径"+ "\\"+fileName));
byte[] content = new byte[255];
int read = 0;
while ((read = in.read(content)) != -1) {
writer.write(content);
}
writer.close();
in.close();
}
//base64解码
private static String base64Decoder(String s) throws Exception {
sun.misc.BASE64Decoder decoder = new sun.misc.BASE64Decoder();
byte[] b = decoder.decodeBuffer(s);
return (new String(b));
}

public static void receive(String receiverMailBoxAddress, String username,String password) {
//本人用的是yahoo邮箱,故接受邮件使用yahoo的pop3邮件服务器
String host = "pop.mail.yahoo.com.cn";
try {
//连接到邮件服务器并获得邮件
Properties prop = new Properties();
prop.put("mail.pop3.host", host);
Session session = Session.getDefaultInstance(prop);
Store store = session.getStore("pop3");
store.connect(host, username, password);

Folder inbox = store.getDefaultFolder().getFolder("INBOX");
//设置inbox对象属性为可读写,这样可以控制在读完邮件后直接删除该附件
inbox.open(Folder.READ_WRITE);

Message[] msg = inbox.getMessages();

FetchProfile profile = new FetchProfile();
profile.add(FetchProfile.Item.ENVELOPE);
inbox.fetch(msg, profile);

for (int i = 0; i < msg.length; i++) {
//标记此邮件的flag标志对象的DELETED位为true,可以在读完邮件后直接删除该附件,具体执行时间是在调用
//inbox.close()方法的时候
msg[i].setFlag(Flags.Flag.DELETED, true);
handleMultipart(msg[i]);
System.out.println("****************************");
}
if (inbox != null) {
//参数为true表明阅读完此邮件后将其删除,更多的属性请参考mail.jar的API
inbox.close(true);
}
if (store != null) {
store.close();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}

Ⅸ JavaMail imap 协议 search接口搜索中文问题

设置方法:
1、在Outlook中,点击上方工具条中“发送和接收”旁的下拉箭头。
2、选择发送,选择接收设置,选择定义发送,选择接收组。
3、在“发送/接收设置”窗口里选择所有账户,点击“编辑”按钮。
4、选中IMAP账户,在右侧“接收邮件项目”下选择“使用下面定义的自定义行为”
5、勾选文件夹选项下要接收邮件全文的文件夹,将收取方式由“仅下载邮件头”改为“下载包含附件在内的整个邮件”,点击“确定”。

IMAP(即Internet Message Access Protocol,互联网信息访问协议),您可以通过这种协议将邮件服务器上的邮件双向和计算机或移动设备终端同步邮件信息。特别适合在多点使用环境多客户端工具之间的保持邮件信息同步的需求,非常适合于移动办公。IMAP4与POP3协议类似,都是邮件获取协议的一种,IMAP的最主要特点为“同步操作”。
IMAP4改进了POP3的不足,用户可以设置先通过浏览邮件信件头来决定是否收取、删除和检索邮件的特定部分,IMAP4提供的摘要浏览功能(只接收邮件头信息功能)可以在阅读完所有的邮件到达时间、主题发件人、大小等信息后才作出是否下载的决定。

阅读全文

与javamail中文附件相关的资料

热点内容
儿童怎么做可编程机 浏览:603
数据计算属于什么统计学 浏览:921
07word怎么去掉标记 浏览:979
qq缓存的数据是什么 浏览:348
LED主Kv文件多少兆 浏览:856
苹果edge怎么删除下载文件 浏览:471
sas逻辑回归代码 浏览:572
用于keil下的stc器件数据库 浏览:400
新闻网站后台如何操作前台 浏览:539
在剪映app中怎么查看视频尺寸 浏览:9
linux文件成分包括 浏览:886
文件转换免费的软件 浏览:644
linuxwpsxlsx 浏览:482
小米手机怎么上移动网络连接失败怎么办 浏览:598
win10系统打开java 浏览:479
全日制编程什么意思 浏览:447
笔记本创建局域网怎么传文件 浏览:871
怎样查看id密码 浏览:647
赣州极客晨星少儿编程怎么样 浏览:690
觉醒年代哪个app可以免费观看 浏览:830

友情链接