2012-09-11 147 views
3

我想发送非常大的电子邮件,通常在3 MB的范围内,但可以更大。问题在于,我们的adsl产品线在性能方面并不总是很稳定,我们的电子邮件托管从本地解决方案更改为远程解决方案。这意味着通过使用正常的C#发送方法,我保持达到超时到达异常。我不想只是增加超时时间。要成功上传3Mb电子邮件,我需要400秒的超时时间。通过本地smtp服务发送电子邮件

正在回答here 现在我可以通过本地smtp服务获取电子邮件,但前提是我没有附加附件。如果附件位于3Mb区域,则完全失败。如果它很小,那么当我尝试使用outlook来取消电子邮件时会失败。

我没有删除smtp服务的最大文件附件大小。任何其他设置或如此我可能会错误?

如果它有助于在运行的SMTP服务是一个虚拟机运行Windows 2008在PC上运行Windows 7

+0

为什么你不把你的大消息分解成几条消息? – Dennis

+1

您可以将数据分成较小的消息,或者重新考虑您的方法,并将您的文件托管在存储区域,然后将链接寄出。通过电子邮件移动兆字节只是要求长期运行的麻烦(在某些时候,smtp服务器*将会爆炸。那么电子邮件备份呢?) – Alex

+0

您可以将文件放入收存箱,然后弹出链接在你的电子邮件中。 – d4v3y0rk

回答

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(); 
    } 
0

如果它只是传输数据和电子邮件的电脑是唯一的媒介,为什么不删除整个电子邮件解决方案,并在远程连接上托管一个webservice,一旦接收到所有chunck,它就可以接受块并组装文件?或者更简单一些,正如Phill所建议的那样,使用FTP或具有恢复上传功能的东西已经到位了? - 问题不在于你的系统,我不认为你会找到解决这个问题的任何形式的电子邮件配置。您的连接似乎与90年代的互联网一样快速(并且稳定)。从那时起传输大量数据的解决方案可能是解决您的问题的最简单方法。

相关问题