跳转到内容

WebObjects/Project WONDER/Frameworks/ERJavaMail

来自维基教科书,开放世界中的开放书籍

ERJavaMail 为从 WebObjects 应用程序发送基于组件的电子邮件提供了一个简单而强大的 API。ERJavaMail 不依赖于 Project Wonder 的任何其他部分,并且是开始使用 Wonder 的一个好方法。

  • er.javamail.centralize = true

Centralize 将所有电子邮件发送给 er.javamail.adminEmail 用户。

  • er.javamail.debugEnabled = true

确定是否显示电子邮件调试信息。这包含协议级别的调试信息。

要发送集中式电子邮件的管理员用户的电子邮件地址。这是必需的属性。

  • er.javamail.smtpHost = smtp.domain.com

要使用的 SMTP 主机名。如果未设置,将检查 mail.smtp.host,最终将使用 WOHost。

  • er.javamail.senderQueue.size = 50

发送者队列可以容纳的消息数量。默认值为 50。

  • er.javamail.milliSecondsWaitIfSenderOverflowed = 6000

如果发送者队列已满,则等待的毫秒数。默认值为 6000。

  • er.javamail.smtpAuth = true

设置是否使用经过身份验证的 SMTP 发送外发邮件。如果设置,er.javamail.smtpUser 也必须设置(最好还要设置 er.javamail.smtpPassword)。

  • er.javamail.smtpUser = smtpusername

用于登录到经过身份验证的 SMTP 服务器的用户名。

  • er.javamail.smtpPassword = smtppassword

用于登录到经过身份验证的 SMTP 服务器的密码。

  • er.javamail.XMailerHeader =

要添加到所有外发邮件消息中的 X-Mailer 标头。默认为空。

  • er.javamail.defaultEncoding = UTF-8

用于消息内容的默认字符编码。默认为 ???。

  • er.javamail.WhiteListEmailAddressPatterns =

白名单电子邮件地址模式的逗号分隔列表。如果设置,则仅匹配其中一个白名单模式的地址将被传递。模式语法与 EOQualifier 的 caseInsensitiveLike 相同。

  • er.javamail.BlackListEmailAddressPatterns =

黑名单电子邮件地址模式的逗号分隔列表。如果设置,则任何与黑名单模式匹配的电子邮件地址都不会被传递。模式语法与 EOQualifier 的 caseInsensitiveLike 相同。黑名单过滤器最后处理,因此黑名单模式优先于白名单模式。

示例用法

[编辑 | 编辑源代码]
 // Create an instance of an ERMailDelivery subclass
 ERMailDeliveryHTML mail = new ERMailDeliveryHTML ();
 
 // Here ERMailDeliveryHTML needs a WOComponent to 
 // render the HTML text content.
 mail.setComponent(mailPage);
 
 // Here you create a new instance of the message
 // You can loop over this fragment of code, not 
 // forgetting to use newMail ()
 // before you set the attributes of the message.
 try {
   mail.newMail();
   mail.setFromAddress(emailFrom);
   mail.setReplyToAddress(emailReplyTo);
   mail.setSubject(emailSubject);
   mail.setToAddresses(new NSArray (toEmailAddresses));
   // Send the mail.  There is an optional sendMail(boolean) that 
   // optionally blocks during the send.
   mail.sendMail();
 } catch (Exception e) {
   // handle the exception ...
 }

带有附件的邮件发送示例

[编辑 | 编辑源代码]

ERMailDelivery 的子类不仅会为您传递邮件,还会创建消息。因此,ERMailDelivery 在某种程度上更像是一条消息而不是一种传递机制。对于要发送的每条消息,请实例化 ERMailDelivery 的具体子类(例如 ERMailDeliveryPlainText)。然后您可以向其添加附件。以下是一段发送带附件的邮件的简单代码片段。附件的 MimeType 是从文件名扩展名中解析出来的。

默认情况下,发送邮件是异步的,您可以指定一个标志(true == 应该阻塞,false == 不应该阻塞)来影响行为。

 byte[] content; // assume this exist, same interface exists for NSData, too
 // Create an instance of an ERMailDelivery subclass
 ERMailDeliveryPlainText message = new ERMailDeliveryPlainText();
 // set the text and subject
 message.setTextContent("Some Mail text");
 message.setSubject("The mail subject");
 // add the attachment
 message.addAttachment(new ERMailDataAttachment("myattachment.zip", null, content));
 message.setToAddress("[email protected]");
 message.setFromAddress("[email protected]");
 // send the mail asynchronously
 message.sendMail();


注意事项

[编辑 | 编辑源代码]

注意包含要发送组件的 WOContext。如果您在正常的请求-响应循环中使用 ERMailDeliveryHTML,并且使用默认的 WOContext,则发送给用户的下一页很可能是发送的组件,而不是您想要发送的页面。有几种可能的解决方法。一种方法是从您的操作方法返回特定组件而不是 null。我使用以下代码获得了更好、更一致的成功

 WOContext context = (WOContext) context().clone();
 MyComponent component = (MyComponent) WOApplication.application().pageWithName(MyComponent.class.getName(), context);
 ERMailDeliveryHTML mail = new ERMailDeliveryHTML();
 mail.setComponent(component);
 ...

这似乎可以将电子邮件正确地隔离到当前上下文的一个克隆中,而不是实际的活动上下文。您的里程可能会有所不同。

华夏公益教科书