我正在尝试发送非常大的电子邮件,通常在3 MB的范围内,但可以更大。问题是我们的adsl系列在性能方面并不总是非常稳定,我们的电子邮件托管从本地解决方案变为远程解决方案。这意味着通过使用正常的C#send方法,我一直达到超时达到的异常。而且我不想只是增加超时。要成功上传3Mb电子邮件,我需要超时400秒。
回答here 现在我可以通过本地smtp服务获取电子邮件,但前提是我没有附加附件。如果附件位于3Mb区域,则其完全失败。如果它很小,当我尝试用outlook拉下电子邮件时它会失败。
我确实从smtp服务中删除了最大文件附件大小。任何其他设置或我都可能出错?
如果它有助于运行的电脑是smtp服务是在运行win 7的电脑上运行win 2008的虚拟机。
答案 0 :(得分:0)
如果仅仅是传输数据和电子邮件只是媒介,那么为什么不放弃整个电子邮件解决方案,并在远程连接上托管一个web服务,一旦收到所有的块,它就可以接受块并组装文件?或者甚至更简单,正如Phill建议的那样,使用FTP或具有恢复上传功能的东西已经存在? - 问题不在于您的系统,我认为您不会找到任何解决此问题的电子邮件配置。您的连接似乎与90年代的互联网一样快(并且稳定)。从那时起传输大量数据的解决方案可能是解决问题的最简单方法。
答案 1 :(得分:0)
我使用SendAsync修复它,并按如下方式使用它
我将所有电子邮件都放在了Fifo列表中。 添加新电子邮件后,我删除了一封并尝试发送。 这是我的发送功能
public void Sender()
{
if (Globalcls.Message_list.Count == 0)
return;
SmtpClient client = new SmtpClient();
client.Credentials = new System.Net.NetworkCredential(Globalcls.settings.username, Globalcls.settings.password);
client.Port = Convert.ToInt32(Globalcls.settings.portS);
client.Host = "smtp.xdsl.co.za";
client.SendCompleted += new SendCompletedEventHandler(MailSendCallback);
if (Globalcls.Message_list.Count > 0)
{
try
{
client.SendAsync(Globalcls.Message_list[0].msg, "1");
}
catch (Exception ex)
{
//do exception stuff here, only cut here to make post shorter
}
}
static void MailSendCallback(object sender, AsyncCompletedEventArgs arg)
{
// oncomllete event for async send.
if (arg.Error != null)
{
//mail did not send, here I do not remove it and increment an counter so to delete a mail that keeps failing
}
else
{
Form1 frm1 = new Form1();
frm1.que("email sent to " + Globalcls.projects[Globalcls.Message_list[0].project].name);
frm1.Dispose();
Globalcls.Message_list[0].msg.Dispose();
foreach (string meh in Globalcls.Message_list[0].files)
File.Delete(meh);
Globalcls.Message_list.RemoveAt(0);
}
if (Globalcls.Message_list.Count > 0)
{
Form1 frm2 = new Form1();
frm2.Sender();
frm2.Dispose();
}