我正在使用SmtpClient發送帶附件的電子郵件。 但是對於某個批處理,我們需要以某種方式保存MailMessage而不是發送它們。 我們正在考慮/希望手動將消息上傳到用戶的草稿文件夾。如何在使用SmtpClient時保存電子郵件而不是發送郵件?
是否可以保存這些消息與完整的附件(不可能,我會想到)。或者,也可以將郵件上傳到用戶帳戶中的文件夾?
如果任何人有任何這方面的經驗,我非常感謝一些幫助或指針。
我正在使用SmtpClient發送帶附件的電子郵件。 但是對於某個批處理,我們需要以某種方式保存MailMessage而不是發送它們。 我們正在考慮/希望手動將消息上傳到用戶的草稿文件夾。如何在使用SmtpClient時保存電子郵件而不是發送郵件?
是否可以保存這些消息與完整的附件(不可能,我會想到)。或者,也可以將郵件上傳到用戶帳戶中的文件夾?
如果任何人有任何這方面的經驗,我非常感謝一些幫助或指針。
在ASP.NET中進行測試時,我們將電子郵件保存到一個文件夾,而不是通過電子郵件服務器發送。也許你可以改變你的批處理的web.config
這樣的設置?
<system.net>
<mailSettings>
<smtp deliveryMethod="SpecifiedPickupDirectory">
<specifiedPickupDirectory pickupDirectoryLocation="c:\Temp\mail\"/>
</smtp>
</mailSettings>
</system.net>
附加信息:
謝謝工作。另外Avram(見下文)發佈了一個有用的鏈接,討論將電子郵件名稱從自動生成的GUID更改爲您自己的值。 – user17510 2009-02-20 00:57:35
我試過這個方法,並且我得到一個錯誤,指出「From」地址沒有被指定。有沒有一種方法可以在web.config中指定SpecifiedPickupDirectory?當你進行網絡設置時,有 – codeMonkey 2018-01-19 19:01:51
這高度依賴於電子郵件客戶端及其自動化API。 SMTP是一種郵件發送和傳輸協議。它沒有能力保存甚至檢索電子郵件。
您可以使用web.config
/app.config
文件中的system.net
設置進行配置。
<system.net>
<mailSettings>
<smtp deliveryMethod="Network">
<network host="mail.mydomain.com" port="25" />
</smtp>
<!-- Use this setting for development
<smtp deliveryMethod="SpecifiedPickupDirectory">
<specifiedPickupDirectory pickupDirectoryLocation="C:\Temp" />
</smtp>
-->
</mailSettings>
</system.net>
此外,這裏有一個鏈接的信息migrating from System.Web.Mail
to System.Net.Mail
。
這可以幫助 - Adding Save() functionality to Microsoft.Net.Mail.MailMessage
主要IDEIA,提出延期至MAILMESSAGE,通過反射決策一種保存方法。
謝謝,看看我是否也可以在這裏添加附件。 – user17510 2009-02-20 00:42:36
以及其他答案的SpecifiedPickupDirectory
信息,如果您希望確保您的電子郵件發送到相對於站點根目錄的文件夾 - 在不知道路徑的構建服務器上測試,您可以添加一個快速檢查你的電子郵件發送代碼:
SmtpClient client = new SmtpClient();
...
// Add "~" support for pickupdirectories.
if (client.DeliveryMethod == SmtpDeliveryMethod.SpecifiedPickupDirectory && client.PickupDirectoryLocation.StartsWith("~"))
{
string root = AppDomain.CurrentDomain.BaseDirectory;
string pickupRoot = client.PickupDirectoryLocation.Replace("~/", root);
pickupRoot = pickupRoot.Replace("/",@"\");
client.PickupDirectoryLocation = pickupRoot;
}
而且你的測試將是這個樣子(請確保您使用的App_Data所以IIS可以寫入該文件夾):
// Arrange - get SitePath from AppDomain.Current.BaseDirectory + ..\
string pickupPath = Path.Combine(SitePath, "App_Data", "TempSmtp");
if (!Directory.Exists(pickupPath))
Directory.CreateDirectory(pickupPath);
foreach (string file in Directory.GetFiles(pickupPath, "*.eml"))
{
File.Delete(file);
}
// Act (send some emails)
// Assert
Assert.That(Directory.GetFiles(pickupPath, "*.eml").Count(), Is.EqualTo(1));
的bug也需要在f的某些版本中添加作爲解決方法ramework。所以完成的版本看起來像:
<system.net>
<mailSettings>
<smtp deliveryMethod="SpecifiedPickupDirectory">
<specifiedPickupDirectory pickupDirectoryLocation="c:\Temp\mail\"/>
<network host="localhost" />
</smtp>
</mailSettings>
</system.net>
「而不是發送」。 – Avram 2009-02-19 23:52:42