我的代码如下:
public boolean send() throws TestReportingException, MessagingException
{
try
{
String encodingOptions = "text/plain; charset=UTF-8";
Authenticator authenticator = new Authenticator()
{
// override the getPasswordAuthentication method
protected PasswordAuthentication getPasswordAuthentication()
{
return new PasswordAuthentication(username, password);
}
};
// Create the mail session
Session session = Session.getInstance(maileProperties, authenticator);
MimeMessage mimeMessage = new MimeMessage(session);
mimeMessage.setHeader("Content-Type", encodingOptions);
// Set From: header field of the header.
mimeMessage.setFrom(new InternetAddress(from, fromName));
// Set To: header field of the header.
for (String s : toList)
{
if (null == s)
{
throw new TestReportingException("Email address is null");
}
mimeMessage.addRecipients(Message.RecipientType.TO, InternetAddress.parse(s));
}
for (String s : ccList)
{
mimeMessage.addRecipients(Message.RecipientType.CC, InternetAddress.parse(s));
}
// Set Subject: header field
mimeMessage.setSubject(subject,"UTF-8");
// Create the message part
//MimeBodyPart messageBodyPart = new MimeBodyPart();
// messageBodyPart.setContent(message, encodingOptions);
// Create the message part
MimeBodyPart messageBodyPart = new MimeBodyPart();
mimeMessage.setHeader("Content-Type", encodingOptions);
// Now set the actual message
messageBodyPart.setText(message, "utf-8", "plain");
// Now set the actual message
//messageBodyPart.setText(message, "utf-8", "html");
Multipart multipart = new MimeMultipart();
// Set text message part
multipart.addBodyPart(messageBodyPart);
// Part two is attachment
if (null != attachmentSource)
{
messageBodyPart = new MimeBodyPart();
messageBodyPart.setDataHandler(new DataHandler(attachmentSource));
messageBodyPart.setFileName(attachmentSource.getName());
multipart.addBodyPart(messageBodyPart);
}
// Send the complete message parts
mimeMessage.setContent(multipart);
// Send message
//Transport.send(mimeMessage);
SSm.getLogger().debug("Subject: "+mimeMessage.getSubject());
Transport.send(mimeMessage);
SSm.getLogger().info("\n\nSent message successfully....");
clear();
return true;
}
catch (MessagingException mex)
{
SSm.getLogger().error(mex.getMessage());
throw mex;
}
catch (Exception e)
{
SSm.getLogger().error(e.getMessage(), e);
throw new TestReportingException(e.getMessage(), e);
}
}
属性包括:
注意:文本在发送之前没有损坏。message.getSubject()打印出来的是干净的中文文本我猜我的编码方式有问题
编辑
以下是调试输出:
debug:setdebug:JavaMail版本1.5.5
debug:getProvider()返回javax.mail.provider[TRANSPORT,smtp,com.sun.mail.smtp.smtptransport,Oracle]
调试SMTP:需要用户名和密码进行身份验证
调试SMTP:useEhlo为true,useAuth为true
调试SMTP:尝试连接到主机“smtp.gmail.com”,端口587,isSSL false
220 smtp.gmail.com ESMTP s20sm18171725pfg.11-gsmtp
调试SMTP:已连接到主机“smtp.gmail.com”,端口:587
>
EHLO Jake-Yoga3.HitronHub.Home
250-smtp.gmail.com为您服务,[96.49.181.179]
250-尺寸35882577
250-8bitmime
250-starttls
250-增强状态代码
250-流水线
250块
250 SMTPUTF8
调试SMTP:找到扩展名“size”,参数“35882577”
调试SMTP:找到扩展“8BitMime”,arg“”
调试SMTP:找到扩展名“starttls”,arg“”
调试SMTP:找到扩展名“EnhancedStatusCodes”,arg“”
调试SMTP:找到扩展“Pipelining”,参数“”
调试SMTP:找到扩展“chunking”,参数“”
调试SMTP:找到扩展名“SMTPUTF8”,参数“”
启动
220 2.0.0准备启动TLS
EHLO Jake-Yoga3.HitronHub.Home
250-smtp.gmail.com为您服务,[96.49.181.179]
250-尺寸35882577
250-8bitmime
250-身份验证登录普通XOAUTH2普通ClientToken OAUTHBEARER XOAUTH
250-增强状态代码
250-流水线
250块
250 SMTPUTF8
调试SMTP:找到扩展名“size”,参数“35882577”
调试SMTP:找到扩展“8BitMime”,arg“”
调试SMTP:找到扩展名“auth”,参数“login PLAIN XOAUTH2 plaine-clienttoken OAUTHBEARER xoauth”
调试SMTP:找到扩展名“EnhancedStatusCodes”,arg“”
调试SMTP:找到扩展“Pipelining”,参数“”
调试SMTP:找到扩展“chunking”,参数“”
调试SMTP:找到扩展名“SMTPUTF8”,参数“”
调试SMTP:尝试使用以下机制进行身份验证:登录普通摘要-MD5 NTLM XOAUTH2
调试SMTP:使用机制登录
DEBUG smtp:AUTH LOGIN命令跟踪已取消
调试SMTP:身份验证登录成功
调试SMTP:use8bit false
邮件来源:
250 2.1.0 OK S20SM18171725PFG.11-gsmtp
RCPT至:
250 2.1.5 OK S20SM18171725PFG.11-gsmtp
调试SMTP:已验证的地址
调试SMTP:jstone@i-koda.com
数据
354继续S20SM18171725PFG.11-gsmtp
来自:iKoda Report
致:jstone@i-koda.com
消息ID:<1926337998.1.1488002481716@jake-yoga3>
主题:=?UTF-8?B?QNZ4Y2IGW6TCUMKTIMOKWRJCRSDDPMK4WQ0GW6TCUMKTIMOKWRJCRQ==?=
MIME-版本:1.0
内容类型:多部分/混合;
boundary="----=_Part_0_1855484302.1488002481637"
>
-----=_PART_0_1855484302.1488002481637
内容类型:text/plain;Charset=UTF-8
Content-Transfer-Encoding:base64
>
RGVHCIBAEGN2LA0KDQPCDNHJYIDDPMK4WQ0GW6TCUMKTIMOKWRJCRSDDDPMK4WQ0GW6TCUMKTW6TC
UMKTIMOKWRJCRSDDDPMK4WQ0GW6TCUMKTIMOKWRJCRWH0DHBZOI8VD3D3LMKTA29KYS5JB20VZGVS
axzlcnkvzhnmcj91znq9mtaxmjc3mczjptewmti3njtdpmk4wq0gw6tcumktimokwrjcrsddpmk4
WQ0GW6TCUMKT
----=_PART_0_1855484302.1488002481637--
.
250 2.0.0 OK 1488002489 S20SM18171725PFG.11-gsmtp
调试SMTP:邮件已成功传递到邮件服务器
退出
221 2.0.0关闭连接S20SM18171725PFG.11-gsmtp
[信息]“jake.app”com.ikoda.service.utilities.emailout.send(emailout.java:256)01:27:
>
已成功发送消息....
>
我已经发现了问题所在。问题不在Email类中,只与JavaMail相关。(所以上面的代码是正确的)
问题是在我的控制器中从spring的MessageBundle的一个Hot-ired实例中提取文本。
我错误地使用了下面的代码,以便我的日志记录类能够记录从消息包中提取的字符串。
byte[] barray =messageSource.getMessage(code, null, LocaleContextHolder.getLocale()).getBytes(Charset.forName("UTF-8"));
String s = new String(barray);
Log4j可以读取主题和消息(由StringBuilder构建)中的字符串,这使我相信这些字符串是正确的UTF-8。但是,javax.mail在传输过程中出现了混乱。
我应该做的是:
messageSource.getMessage(code, null, LocaleContextHolder.getLocale())
现在我的记录器只是得到???,但电子邮件发送得很好。
所以,保持简单愚蠢。
问题内容: 我有一个定义的编码(utf8)的输入文件,从中我创建了不同的文件,这些文件的名称和内容(再次是utf8)取自该输入文件。 我的问题是一个特定的Windows系统创建的文件没有正确的字符。这些文件的内容可读性很强,但名称却不可读。而是使用文件名。 在其他Windows系统上,一切正常。 可以在的第二个参数中设置文件内容的编码,但是似乎无法设置文件名的编码。 谢谢。 问题答案: 看到两个字
我正在为我的Web应用程序构建一个邮件模块。在我目前的位置上,我正在尝试获取邮件正文并正确解码。但是,当我在邮件中遇到国际字符时,它无法正确解码它们。 例如。我有一个原始的电子邮件正文: 这是解码后的结果: 应该是。我只在处理国际字符时见过这个问题。有人知道如何修复它吗?我在下面包含了我的解码代码。它取自http://www.sitepoint.com/exploring-phps-imap-li
我习惯于用JavaFx编写如下所示的代码,因为这就是我几年前学习的方式。 我最近安装了JetBrains IntelliJ IDEA Ultimate Edition 2018.1.6,我发现要打开primaryStage窗口,我需要一个fxml文件。 我必须这么做, 如果我运行第一个代码片段,什么都不会显示。但是如果我用FXMLLoader.load(getClass(). getResourc
问题内容: 我正在使用此代码通过OpenCSV将波斯语单词添加到csv文件中: 当我在Excel中打开生成的csv文件时,它包含 “ứỶờịỆ” 。其他程序(例如notepad.exe)没有此问题,但是我所有的用户都在使用MS Excel。 与更换OpenCSV SuperCSV不解决这个问题。 当我手动将波斯字符输入到csv文件中时,我没有任何问题。 问题答案: 不幸的是,CSV是一种非常特殊的
问题内容: 我有一个PHP脚本,名为: http://cyber- flick.com/apiMorpho.php?method=getMorphoData&word=kot 以纯文本显示一些数据: 如您所见,在适当的字符位置上有很多“忙碌”。我想做的是以某种方式显示此内容,以便人们在浏览器中看到正确的UTF-8字符。 您可以将其封装在HMTL标签中并以元UTF-8编码进行设置,但是由于将从该脚本
我试图在EditText中设置文本,但它说: 我的代码如下: 不要说用< code>setText,因为我用的是kotlin,不是Java。