java mailapi 中的变音字符支持
Umlaut character support in java mailapi
MimeBodyPart mimebodypart = new MimeBodyPart();
DataSource datasource = new FileDataSource(file);
mimebodypart.setDataHandler(new DataHandler(datasource));
//mimebodypart.setFileName(MimeUtility.encodeText(file.getName(), "UTF-8", null));
mimebodypart.setFileName(file.getName());
在上面的代码中,我的文件名为 PDF testöäüßÜÄÖtest DEV2 - 13.06.2016.tiff
附件是 untitled_000000456.tiff
<000000456> 是显示的随机数。
使用 stöäüßÜÄÖ 工作正常,但当字符串多一个字符时,即 estöäüßÜÄÖ 它不工作。
此外,öäüßÜÄÖöäüßÜÄÖ 和 testtesttest(任何长度)都在工作。
谁能指出我做错了什么?
我正在使用 JavaMail API JAR » 1.5.6
https://mvnrepository.com/artifact/javax.mail/javax.mail-api/1.5.6
java 版本 1.8
编辑
经过一些 headers 我能够得到正确的文件名,但是消息 body 丢失了。这是更新后的代码。
try {
Message message = new MimeMessage(Session.getInstance(System.getProperties()));
message.setHeader("MIME-Version", "1.0");
message.setHeader("Content-Disposition", "attachment; filename=\""+ file.getName() +"\"");
//file.getName() returns PDF "testöäüßÜÄÖtest DEV2 - 13.06.2016.tiff"
message.saveChanges();
String email_subject = "subject";
message.setSubject(email_subject, "UTF-8", null));
message.setSentDate(new Date());
MimeBodyPart content = new MimeBodyPart();
String msg_body = "Message body";
content.setContent("<p style=font-style:italic;font-size:20px>"+ msg_body +" </p>", "text/html;charset=UTF-8");
Multipart multipart = new MimeMultipart();
multipart.addBodyPart(content);
MimeBodyPart attachment = new MimeBodyPart();
DataSource source = new FileDataSource(file); //file is of type File
attachment.setDataHandler(new DataHandler(source));
multipart.addBodyPart(attachment);
message.setContent(multipart);
message.getFlags().add(Flags.Flag.DRAFT);
OutputStream out = new FileOutputStream(fileName);
//fileName.getName() returns PDF testöäüßÜÄÖtest DEV2 - 13.06.2016.eml
message.writeTo(out);
out.close();
out=null;
}catch (Exception ex) {
ex.printStackTrace();
}
我做错了什么 body 不见了?
试试这个更简单更正确的版本:
Message message = new MimeMessage(Session.getInstance(System.getProperties()));
String email_subject = "subject";
message.setSubject(email_subject, "UTF-8");
message.setSentDate(new Date());
MimeBodyPart content = new MimeBodyPart();
String msg_body = "Message body";
content.setText("<p style=font-style:italic;font-size:20px>"+ msg_body +" </p>", "UTF-8", "html");
Multipart multipart = new MimeMultipart();
multipart.addBodyPart(content);
MimeBodyPart attachment = new MimeBodyPart();
attachment.attachFile(file);
multipart.addBodyPart(attachment);
message.setContent(multipart);
message.setFlags(new Flags(Flags.Flag.DRAFT), true);
OutputStream out = new FileOutputStream(fileName);
message.saveChanges();
message.writeTo(out);
out.close();
如果这不起作用,post fileName
引用的文件的内容。
MimeBodyPart mimebodypart = new MimeBodyPart();
DataSource datasource = new FileDataSource(file);
mimebodypart.setDataHandler(new DataHandler(datasource));
//mimebodypart.setFileName(MimeUtility.encodeText(file.getName(), "UTF-8", null));
mimebodypart.setFileName(file.getName());
在上面的代码中,我的文件名为 PDF testöäüßÜÄÖtest DEV2 - 13.06.2016.tiff 附件是 untitled_000000456.tiff <000000456> 是显示的随机数。
使用 stöäüßÜÄÖ 工作正常,但当字符串多一个字符时,即 estöäüßÜÄÖ 它不工作。
此外,öäüßÜÄÖöäüßÜÄÖ 和 testtesttest(任何长度)都在工作。
谁能指出我做错了什么?
我正在使用 JavaMail API JAR » 1.5.6
https://mvnrepository.com/artifact/javax.mail/javax.mail-api/1.5.6
java 版本 1.8
编辑
经过一些 headers 我能够得到正确的文件名,但是消息 body 丢失了。这是更新后的代码。
try {
Message message = new MimeMessage(Session.getInstance(System.getProperties()));
message.setHeader("MIME-Version", "1.0");
message.setHeader("Content-Disposition", "attachment; filename=\""+ file.getName() +"\"");
//file.getName() returns PDF "testöäüßÜÄÖtest DEV2 - 13.06.2016.tiff"
message.saveChanges();
String email_subject = "subject";
message.setSubject(email_subject, "UTF-8", null));
message.setSentDate(new Date());
MimeBodyPart content = new MimeBodyPart();
String msg_body = "Message body";
content.setContent("<p style=font-style:italic;font-size:20px>"+ msg_body +" </p>", "text/html;charset=UTF-8");
Multipart multipart = new MimeMultipart();
multipart.addBodyPart(content);
MimeBodyPart attachment = new MimeBodyPart();
DataSource source = new FileDataSource(file); //file is of type File
attachment.setDataHandler(new DataHandler(source));
multipart.addBodyPart(attachment);
message.setContent(multipart);
message.getFlags().add(Flags.Flag.DRAFT);
OutputStream out = new FileOutputStream(fileName);
//fileName.getName() returns PDF testöäüßÜÄÖtest DEV2 - 13.06.2016.eml
message.writeTo(out);
out.close();
out=null;
}catch (Exception ex) {
ex.printStackTrace();
}
我做错了什么 body 不见了?
试试这个更简单更正确的版本:
Message message = new MimeMessage(Session.getInstance(System.getProperties()));
String email_subject = "subject";
message.setSubject(email_subject, "UTF-8");
message.setSentDate(new Date());
MimeBodyPart content = new MimeBodyPart();
String msg_body = "Message body";
content.setText("<p style=font-style:italic;font-size:20px>"+ msg_body +" </p>", "UTF-8", "html");
Multipart multipart = new MimeMultipart();
multipart.addBodyPart(content);
MimeBodyPart attachment = new MimeBodyPart();
attachment.attachFile(file);
multipart.addBodyPart(attachment);
message.setContent(multipart);
message.setFlags(new Flags(Flags.Flag.DRAFT), true);
OutputStream out = new FileOutputStream(fileName);
message.saveChanges();
message.writeTo(out);
out.close();
如果这不起作用,post fileName
引用的文件的内容。