跳轉到內容

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.adminEmail = user@domain.com

要傳送集中式電子郵件的管理員使用者的電子郵件地址。這是必需的屬性。

  • 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("receiver@bitbucket.com");
 message.setFromAddress("sender@bitbucket.com");
 // 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);
 ...

這似乎可以將電子郵件正確地隔離到當前上下文的一個克隆中,而不是實際的活動上下文。您的里程可能會有所不同。

華夏公益教科書