Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为HTML电子邮件正文编码希伯来文文本错误_Java_Email_Exception_Character Encoding_Jakarta Mail - Fatal编程技术网

Java 为HTML电子邮件正文编码希伯来文文本错误

Java 为HTML电子邮件正文编码希伯来文文本错误,java,email,exception,character-encoding,jakarta-mail,Java,Email,Exception,Character Encoding,Jakarta Mail,我开发了一个程序,最终会发送一封确认电子邮件。 我需要用希伯来语发送电子邮件。 因此,我首先尝试以纯文本形式发送正文,这很好,但是为了使文本从右到左对齐,我必须将其格式化为HTML 首先,我使用: mbp1.setContent(new String(message.getBytes("UTF8"),"ISO-8859-1"), "text/html"); 西欧”字符集,在微软outlook中运行良好,但Gmail给了我胡言乱语。 然后我把它改成: mbp1.setConten

我开发了一个程序,最终会发送一封确认电子邮件。 我需要用希伯来语发送电子邮件。 因此,我首先尝试以纯文本形式发送正文,这很好,但是为了使文本从右到左对齐,我必须将其格式化为HTML

首先,我使用:

    mbp1.setContent(new String(message.getBytes("UTF8"),"ISO-8859-1"), "text/html");
西欧”字符集,在微软outlook中运行良好,但Gmail给了我胡言乱语。

然后我把它改成:

    mbp1.setContent(new String(message.getBytes("UTF8"),"ISO-8859-8-i"), "text/html");
现在可以完美工作了!!! 只是每次发送电子邮件时都会收到来自java的奇怪错误消息:

     java.io.UnsupportedEncodingException: ISO-8859-8-E
 at java.lang.StringCoding.decode(Unknown Source)
 at java.lang.String.<init>(Unknown Source)
 at java.lang.String.<init>(Unknown Source)
 at GoogleMail.Send(GoogleMail.java:78)
 at GoogleMail.Send(GoogleMail.java:31)
 at MainFrame.sendButtonActionPerformed(MainFrame.java:596)
 at MainFrame.access$3(MainFrame.java:563)
 at MainFrame$3.actionPerformed(MainFrame.java:423)
 at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
 at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
 at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
 at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
 at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
 at java.awt.Component.processMouseEvent(Unknown Source)
 at javax.swing.JComponent.processMouseEvent(Unknown Source)
 at java.awt.Component.processEvent(Unknown Source)
 at java.awt.Container.processEvent(Unknown Source)
 at java.awt.Component.dispatchEventImpl(Unknown Source)
 at java.awt.Container.dispatchEventImpl(Unknown Source)
 at java.awt.Component.dispatchEvent(Unknown Source)
 at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
 at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
 at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
 at java.awt.Container.dispatchEventImpl(Unknown Source)
 at java.awt.Window.dispatchEventImpl(Unknown Source)
 at java.awt.Component.dispatchEvent(Unknown Source)
 at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
 at java.awt.EventQueue.access$200(Unknown Source)
 at java.awt.EventQueue$3.run(Unknown Source)
 at java.awt.EventQueue$3.run(Unknown Source)
 at java.security.AccessController.doPrivileged(Native Method)
 at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
 at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
 at java.awt.EventQueue$4.run(Unknown Source)
 at java.awt.EventQueue$4.run(Unknown Source)
 at java.security.AccessController.doPrivileged(Native Method)
 at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
 at java.awt.EventQueue.dispatchEvent(Unknown Source)
 at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
 at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
 at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
 at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
 at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
 at java.awt.EventDispatchThread.run(Unknown Source)
java.io.UnsupportedEncodingException:ISO-8859-8-E
在java.lang.StringCoding.decode(未知源)
位于java.lang.String。(未知源)
位于java.lang.String。(未知源)
发送(GoogleMail.java:78)
发送(GoogleMail.java:31)
在MainFrame.sendbutonActionPerformed(MainFrame.java:596)
在MainFrame.access$3(MainFrame.java:563)
大型机$3.actionPerformed(MainFrame.java:423)
在javax.swing.AbstractButton.fireActionPerformed(未知源)
位于javax.swing.AbstractButton$Handler.actionPerformed(未知源)
在javax.swing.DefaultButtonModel.fireActionPerformed(未知源)
位于javax.swing.DefaultButtonModel.setPressed(未知源)
位于javax.swing.plaf.basic.BasicButtonListener.mouseReleased(未知源代码)
位于java.awt.Component.ProcessMouseeEvent(未知源)
位于javax.swing.JComponent.ProcessMouseeEvent(未知源)
位于java.awt.Component.processEvent(未知源)
位于java.awt.Container.processEvent(未知源)
位于java.awt.Component.dispatchEventImpl(未知源)
位于java.awt.Container.dispatchEventImpl(未知源)
位于java.awt.Component.dispatchEvent(未知源)
位于java.awt.LightweightDispatcher.RetargetMouseeEvent(未知源)
位于java.awt.LightweightDispatcher.ProcessMouseeEvent(未知源)
位于java.awt.LightweightDispatcher.dispatchEvent(未知源)
位于java.awt.Container.dispatchEventImpl(未知源)
位于java.awt.Window.dispatchEventImpl(未知源)
位于java.awt.Component.dispatchEvent(未知源)
位于java.awt.EventQueue.dispatchEventImpl(未知源)
位于java.awt.EventQueue.access$200(未知源)
在java.awt.EventQueue$3.run处(未知源)
在java.awt.EventQueue$3.run处(未知源)
位于java.security.AccessController.doPrivileged(本机方法)
位于java.security.ProtectionDomain$1.doIntersectionPrivilege(未知源)
位于java.security.ProtectionDomain$1.doIntersectionPrivilege(未知源)
在java.awt.EventQueue$4.run处(未知源)
在java.awt.EventQueue$4.run处(未知源)
位于java.security.AccessController.doPrivileged(本机方法)
位于java.security.ProtectionDomain$1.doIntersectionPrivilege(未知源)
位于java.awt.EventQueue.dispatchEvent(未知源)
位于java.awt.EventDispatchThread.pumpOneEventForFilters(未知源)
位于java.awt.EventDispatchThread.pumpEventsForFilter(未知源)
位于java.awt.EventDispatchThread.pumpEventsForHierarchy(未知源)
位于java.awt.EventDispatchThread.pumpEvents(未知源)
位于java.awt.EventDispatchThread.pumpEvents(未知源)
位于java.awt.EventDispatchThread.run(未知源)
现在一切正常,错误不是中止我的应用程序,但当我不知道它的根源时出现这样的错误让我很生气。

更新 2014年9月16日12:34

我刚刚将我的应用程序编译成一个jar文件,当我在Win7上使用ISO-8859-8-I编码运行它时,我在outlook和gmail中得到了gibrish

它只能在eclipse中正常工作!

我必须尝试将其设置回ISO-8859-1或ISO-8859-8。 将会更新

请帮忙

10倍

戴夫

更新2 2014年9月16日13:18

为了使用ISO-8859-I而不会出错,我尝试按照建议使用您的JCharset。 它确实修复了eclipse错误,但破坏了其他一切。 现在我使用ISO-8859-1字符集

当我在outlook上收到邮件时,它是完美的: מק"ט: 19 התקבל ב: 2014-09-16 בשעה: 13:00:24 שם הפרוייקט: שםמיןהעבכהה:

但是,当我收到Gmail上的信息时,一切都混乱了: מק"ט: 19 התקבל ב: 2014-09-16 בשעה: 13:00:24 ×©× ×”×¤×¨×•×™×™×§×˜: ×©× ×ž×–×ž×™×ד××、הודה:

我试着玩浏览器的编码设置,但没有这样的运气, 现在设置为Unicode UTF 8


有什么想法吗?

默认情况下,Sun/Oracle的JRE会根据目标操作系统的配置安装转换器。如果Windows只有欧洲语言,则只安装受支持编码的子集。有关详细信息,请查看以下内容:

适用于Java 6

适用于Java 7

您的第一个代码似乎正确:

希伯来文电子邮件示例

 MimeMessage message = new MimeMessage(mailSession);
 Multipart multipart = new MimeMultipart("alternative");

 BodyPart htmlPart = new MimeBodyPart();
 htmlPart.setContent(new String(messageHtml.getBytes("UTF8"),"ISO-8859-1"), "text/html");
 multipart.addBodyPart(htmlPart);

 message.setContent(multipart);
 message.setFrom(new InternetAddress(from));
 message.setSubject(subject, "UTF-8");

诀窍是从UTF-8转换html(它来自我的消息属性),然后将其转换为ISO格式,这样就不需要设置任何标题。

假设您尝试发送的字符是由Unicode标准定义的(它们不是全部吗?),并且您已经正确地创建了一个包含这些Unicode字符的Java字符串对象,您应该能够使用utf-8编码发送它们。当然,这取决于邮件阅读器理解utf-8(现在大多数都是这样)并能够显示这些特定的Unicode字符(这可能需要在客户端计算机上安装特殊字体或语言包)

但是,我不知道应该如何处理从右到左的显示问题。在某些Unicode字符的字符串显示中是否隐含了这一点

诸如新字符串(message.getBytes(“UTF8”)、“ISO-8859-1”)之类的代码不应该是必需的。如果“message”包含正确的Unicode字符,您应该能够使用mbp1.setText(message,“utf”)
// -- Create a new message --
final MimeMessage msg = new MimeMessage(session);

// -- Set the FROM and TO fields --
msg.setFrom(new InternetAddress(username));
msg.setRecipients(Message.RecipientType.TO, InternetAddress.parse(recipientEmail, false));

if (ccEmail.length() > 0) {
msg.setRecipients(Message.RecipientType.CC, InternetAddress.parse(ccEmail, false));
}

msg.setSubject(title, "utf-8");
msg.setText(message, "utf-8");
msg.setHeader("Content-Type", "text/html; charset=UTF-8");
msg.setSentDate(new Date());

MimeBodyPart mbp1 = new MimeBodyPart();
  try {
mbp1.setDataHandler(new DataHandler(
new ByteArrayDataSource(message.toString(), "text/html")));
      } catch (IOException e1) {
     e1.printStackTrace();
  }
 mbp1.setHeader("Content-Type","text/plain; charset=\"utf-8\""); 
 mbp1.setContent( message, "text/html; charset=utf-8" ); 
 mbp1.setHeader("Content-Transfer-Encoding", "quoted-printable");

// create the second message part
MimeBodyPart mbp2 = new MimeBodyPart();

// attach the file to the message
try {
mbp2.attachFile(fileName);
    } catch (IOException e) {
   e.printStackTrace();
}

Multipart mp = new MimeMultipart();
mp.addBodyPart(mbp1);
mp.addBodyPart(mbp2);
msg.setContent(mp, "text/html");