2013-03-06 15 views
6

Edycja: jestem w stanie wysyłać pocztę bez przywiązaniaWyślij mail z załącznikiem

otrzymuję ten błąd podczas próby wysyłania poczty:

System.Net.Mail.SmtpException: The operation has timed out. 

Poniżej znajduje mój kod:

public static void SendMailMessage(string to, string subject, string body, List<string> attachment) 
{ 
    MailMessage mMailMessage = new MailMessage(); 
    // string body; --> Compile time error, body is already defined as an argument 

    mMailMessage.From = new MailAddress("[email protected]"); 

    mMailMessage.To.Add(new MailAddress(to)); 

    mMailMessage.Subject = subject; 

    mMailMessage.Body = body; 

    foreach (string s in attachment) 
    { 
     var att = new Attachment(s); 

     mMailMessage.Attachments.Add(att); 

    } 


    // Set the format of the mail message body as HTML 
    mMailMessage.IsBodyHtml = true; 
    // Set the priority of the mail message to normal 
    mMailMessage.Priority = MailPriority.High; 

    using (SmtpClient mSmtpClient = new SmtpClient()) 
    { 
     mSmtpClient.Send(mMailMessage); 
    } 
} 

Web Config

<system.net> 
<mailSettings> 
    <smtp from="mailid"> 
    <network host="smtp.gmail.com" port="587" enableSsl="true" userName="username" password="pass" /> 
    </smtp> 
</mailSettings> 

Uwaga: Załączniki nie przekraczającej limit (poniżej niż 25 MB)

Co mogę zrobić, aby rozwiązać ten problem, albo co mi brakuje?

+0

timeout prawdopodobnie wskazuje na brak połączenia z serwerem pocztowym. –

+2

Jest mało prawdopodobne, że Gmail smtp jest w trybie offline, więc spróbuj ustawić enableSsl na false i przetestuj. Wydaje mi się, że używają TLS zamiast SSL do wysyłania – TimothyP

+0

Ok najwyraźniej powinieneś ustawić ssl na true, czy próbowałeś otworzyć surową sesję do SMTP z komputera, na którym uruchomiłeś oprogramowanie? – TimothyP

Odpowiedz

2

Więc w zasadzie odkryliśmy podczas czatu, że problem występuje , ponieważ przesyłanie załączników trwa długo.

Jednym ze sposobów rozwiązania tego jest zwiększenie wartości limitu czasu na smtpclient:

mSmtpClient.Timeout = int.MaxValue; 

Uwaga: Używaj int.MaxValue do testowania ale użyć bardziej realistyczne wartości dla wdrożonej rozwiązania.

0

Skonfiguruj lokalny serwer SMTP do przekazania lub użyj czegoś takiego jak http://aws.amazon.com/ses/. Nie sądzę, że Google zezwoli na programowe przekazywanie przez ich serwery.

+0

Robią to, domena, z której wysyłasz, rozwiązuje się komputer, z którego wysyłasz. W rzeczywistości właśnie otworzyłem surową sesję szpachlowania na 587, pozwalają mi połączyć się bez żadnych problemów.Protokół SMTP nie zapewnia google środków, aby zobaczyć, który program do łączenia się z nim i prawdziwy serwer SMTP jest po prostu inny program. Robimy to cały czas – TimothyP

Powiązane problemy