我使用Java邮件API,我试图通过Gmail的SMTP发送电子邮件。 我的计划是如何工作的:java.util.Scanner中的类用于获取用户输入的 - 我要求用户在邮件发送类中使用的各种参数; 其执行以下操作:
Message mailMessage = new MimeMessage(session);
mailMessage.setFrom(new InternetAddress("example@example.com"));
mailMessage.setRecipients(Message.RecipientType.TO,InternetAddress.parse(mail.getTo()));
mailMessage.setSubject(mail.getSubject());
mailMessage.setText(mail.getMessage());
Transport.send(mailMessage);
一切只要我使用的ASCII符号/字符工作。 但每当我想用“特定国家”人物 - 如[õäöü] - 我得到一堆看起来怪怪的符号......
到目前为止,我所用的技术(不为我工作):
setHeader("Content-Type", "text/plain; charset=UTF-8");
setHeader("Content-Encoding","ISO-8859-9");
setContent(message, "text/plain; charset=iso-8859-2");
注意:当进行的System.out.println(),显示消息被发送正确显示一个IDE内的一切。
编辑:当发送邮件正文[õäöü]这是显示[?一个“”]在Gmail前。
编辑:当mailMessage.setText(MimeUtility.encodeText(mail.getMessage(), "UTF-8", "Q"));
是所使用的,则在Gmail输出以下内容:
"=?UTF-8?Q?=C3=A4=E2=80=9E=E2=80=9D=EF=BF=BD;=0D=0A?="
第二个编辑:有趣的是,当我这样做: mailMessage.setText(strVar + "õäöü", "ISO-8859-1");
它实际上追加“õäöü”很好地在我的电子邮件(但在第一部分[strVar]字符串仍然充满了?'S和[]的)。
MimeMessage message = new MimeMessage(session);
message.setSubject(subject, "UTF-8");
message.setText(body, "UTF-8");
因此,人们必须设置两个,身体和主题的字符编码。
因为@bartac的评论增编
用于相应MimeBodyPart
做setHeader("Content-Type", "text/plain; charset=UTF-8")
您应该使用setText(String text, String charset)
或setText(String text, String charset, String subtype)
设置文本机身采用了特定的编码。
MimeUtility.encodeText()
并不意味着正文文本,但只适用于标题编码的文本(然后只用设置头setHeader
或addHeader
)。
基本上,我的代码工作得很好,因为它应该。 这是CMD,即无法处理非ASCII字符。 我用一个bat文件来访问一个罐子。 我想我只是要做出一点GUI然后...谢谢大家回答。
以下为我工作:
MimeMessage message = ...
message.setSubject(subject, "UTF-8");
message.setContent(body, "text/plain; charset=UTF-8");
其中subject
和body
是没有特殊处理(代码和用户界面使用UTF-8)定期String对象。
1-考虑要与此字符串体内发送电子邮件:
"Olá João!"
2 - 由于代码在GAE服务器运行,这个字符串解释与缺省的ASCII编码。 要使用正确的重音字符发送该邮件,定义字符串为:
String body = "Ol\u00e1 Jo\u00e3o!";
特殊字符手动与其UTF-8码来定义。 搜索您在表中所需要的代码http://www.utf8-chartable.de/
3-将字符串编码UTF-8。 手动键入将现在正确地解释了所有的代码:
Session session = Session.getDefaultInstance(props);
MimeMessage message = new MimeMessage(session);
String encodedSubject = new String (subject.getBytes("UTF-8"),"UTF-8");
String encodedBody = new String (body.getBytes("UTF-8"),"UTF-8");
message.setSubject(encodedSubject, "UTF-8");
message.setText(encodedBody, "UTF-8");
使用从MimeUtility的encodeText方法:
MimeUtility.encodeText(mail_subject, "UTF-8", "B")
(我不知道什么是“B”表示,保持冷静,只是用。实际上,它可以是“B”或“Q”。)
JavaMailSenderImpl emailSender = new JavaMailSenderImpl();
mailSender.setHost("...");
MimeMessage message = emailSender.createMimeMessage();
message.setSubject("...", "UTF-8");
message.setText("...", "UTF-8");
MimeMessageHelper helper = new MimeMessageHelper(message, "UTF-8");
helper.setFrom(from);
helper.setTo(to);
emailSender.send(message);
在情况下,如果您使用HTML邮件,试试这个:
Message message = new MimeMessage(session);
message.setContent(htmlText, "text/html; charset=UTF-8");