我正在尝试通过GMail(实际上是Google Apps)发送电子邮件。这对于正常的邮件来说是完美的,但是我必须测试极端情况。
现在,我正在尝试发送没有正文的消息,并且收到了奇怪的错误消息。当我想消除代码中的错误时,我想知道我是在做错什么还是正在使用的库中有错误。
HtmlEmail currentMessage = new HtmlEmail();
currentMessage.setSSL(true);
currentMessage.setSslSmtpPort(465);
currentMessage.setHostName("smtp.gmail.com");
currentMessage.setAuthentication("[email protected]", "secret");
/** rs is a ResultSet from database **/
if(rs.getString("mailFrom") != null && !rs.getString("mailFrom").isEmpty())
currentMessage.setFrom(rs.getString("mailFrom"));
else
currentMessage.setFrom("[email protected]");
currentMessage.setTo(this.convertRecipientStringToArray(rs.getString("mailTo")));
currentMessage.setCc(this.convertRecipientStringToArray(rs.getString("mailCC")));
currentMessage.setBcc(this.convertRecipientStringToArray(rs.getString("mailBC")));
currentMessage.setSubject(rs.getString("mailSubject"));
if(rs.getString("mailBody") != null && !rs.getString("mailBody").isEmpty())
currentMessage.setTextMsg(rs.getString("mailBody"));
if(rs.getString("mailHtmlBody") != null && !rs.getString("mailHtmlBody").isEmpty())
currentMessage.setHtmlMsg(rs.getString("mailHtmlBody"));
if(rs.getString("mailReplyTo") != null && !rs.getString("mailReplyTo").isEmpty())
currentMessage.addReplyTo(rs.getString("mailReplyTo"));
else
currentMessage.addReplyTo("[email protected]");
currentMessage.send();
此代码适用于“普通”电子邮件:具有有效的正文,主题,收件人等。
当mailbody和mailHtmlBody在数据库中都为NULL或为空时,出现以下错误:
将电子邮件发送到以下服务器失败:smtp.gmail.com:25
完整的错误日志(自己的日志格式)/ stacktrace:
[CRITICAL] 2012-12-19 17:08:00 [CET] - Exception occurred in function com.mypackage.mymailobject.outgoing_sendMails: Sending the email to the following server failed : smtp.gmail.com:25
Stack trace:
org.apache.commons.mail.EmailException: Sending the email to the following server failed : smtp.gmail.com:25
at org.apache.commons.mail.Email.sendMimeMessage(Email.java:1242)
at org.apache.commons.mail.Email.send(Email.java:1267)
at com.mypackage.mymailobject.outgoing_sendMails(mymailobject.java:85)
at com.mypackage.mymailobject.outgoing_do(mymailobject.java:69)
at com.mypackage.Mailer.main(Mailer.java:132)
Caused by: javax.mail.MessagingException: IOException while sending message;
nested exception is:
java.io.IOException: javax.mail.MessagingException: Empty multipart: multipart/mixed;
boundary="----=_Part_0_916488860.1355933279096"
at com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:1141)
at javax.mail.Transport.send0(Transport.java:195)
at javax.mail.Transport.send(Transport.java:124)
at org.apache.commons.mail.Email.sendMimeMessage(Email.java:1232)
... 4 more
Caused by: java.io.IOException: javax.mail.MessagingException: Empty multipart: multipart/mixed;
boundary="----=_Part_0_916488860.1355933279096"
at com.sun.mail.handlers.multipart_mixed.writeTo(multipart_mixed.java:105)
at javax.activation.ObjectDataContentHandler.writeTo(Unknown Source)
at javax.activation.DataHandler.writeTo(Unknown Source)
at javax.mail.internet.MimeBodyPart.writeTo(MimeBodyPart.java:1476)
at javax.mail.internet.MimeMessage.writeTo(MimeMessage.java:1772)
at com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:1099)
... 7 more
我现在有2个问题:
是否可以在没有尸体的情况下发送电子邮件?可以吗
为什么错误消息端口号由25代替465?
参考方案
MIME规范不允许没有主体部分的多部分内容。 JavaMail API(我认为从1.5版开始)允许您将系统属性mail.mime.multipart.allowempty
设置为true
来解决此问题。
我正在查看一些使用双精度变量来存储(360-359.9998779296875)结果为0.0001220703125的代码。 double变量将其存储为-1.220703125E-4。当我使用BigDecimal时,其存储为0.0001220703125。为什么将它双重存储为-1.220703125E-4? 参考方案 我不会在这里提及精度问题,而只会提及数字…
当回复有时是一个对象有时是一个数组时,如何在使用改造时解析JSON回复? - java我正在使用Retrofit来获取JSON答复。这是我实施的一部分-@GET("/api/report/list") Observable<Bills> listBill(@Query("employee_id") String employeeID); 而条例草案类是-public static class…
Java-父类正在从子类中调用方法? - java抱歉,我还是编码的新手,可能还没有掌握所有术语。希望您仍然能理解我的问题。我想得到的输出是:"Cost for Parent is: 77.77" "Cost for Child is: 33.33" 但是,我得到这个:"Cost for Parent is: 33.33" "Cost f…
Java Map,如何将UTF-8字符串正确放置到地图? - java我有一个地图,LinkedHashMap更确切地说。我想在上面放一个字符串对象。然后,我读取此值以查看实际存储的内容。字符串本身具有非ASCII字符(西里尔文,韩文等)。将其放到地图上然后阅读后,这些字符将替换为??? s。一些代码:Map obj = new LinkedHashMap(); System.out.println("name: &…
Java-使用InternetAddress验证电子邮件 - java我有这种方法:public static boolean isValidEmailAddress(String email) { boolean result = true; try { InternetAddress emailAddr = new InternetAddress(email); emailAddr.validate(); } catch …