Как исправить ошибку тайм-аута при отправке письма с вложением? - PullRequest
0 голосов
/ 20 июня 2019

Я использую пробную версию chilkat для отправки электронных писем с использованием служебной учетной записи. Посетите https://www.example -code.com / csharp / smtp_gmailOAuth2.asp

получено сообщение об ошибке простоя при отправке электронной почты с вложением размером более 100 КБ с помощью Chilkat mailman.SendEmail (). Но мне нужно отправить файлы в МБ.

        readSmtpResponse:
        Failed to read beginning of SSL/TLS record.
        b: 0
        dbSize: 0
        nReadNBytes: 0
        idleTimeoutMs: 30000
        Failed to receive more TLS application data.
        tlsApp: Socket operation timeout.
        elapsedMs: Elapsed time: 30031 millisec
        idleTimeoutMs: 30000
      --readSmtpResponse
      SMTP failed when receiving the DATA terminator response.
      smtpRcvFinalResponse: Socket operation timeout.

1 Ответ

0 голосов
/ 20 июня 2019

В качестве альтернативы вы можете использовать System.Net.Mail.Работает нормально для меня в любом случае.Если вам действительно нужно использовать chilkat, игнорируйте мой пост.

using System;
using System.Net;
using System.Net.Mail;

namespace BTCSharp
{
    public abstract class Mail
    {
        static SmtpClient Client = new SmtpClient();
        private static string From;

        public static void Login(string xHost, int xPort, string xUsername, string xPassword, bool xSsl)
        {
            //LOGIN
            Client.Host = xHost;
            Client.Port = xPort;
            Client.DeliveryMethod = SmtpDeliveryMethod.Network;

            //CREDENTIALS
            Client.UseDefaultCredentials = false;
            Client.Credentials = new NetworkCredential(xUsername, xPassword);
            Client.Timeout = 30000;
            Client.EnableSsl = xSsl;
            if (xUsername.Contains("@")) From = xUsername;
        }
        public static void Login(string xHost, int xPort, string xAddress, string xUsername, string xPassword, bool xSsl)
        {
            //LOGIN WHERE USERNAME DIFFERENT TO MAIL ADDRESS
            Login(xHost, xPort, xUsername, xPassword, xSsl);
            From = xAddress;
        }

        public static bool Send(string xFrom, string xTo, string xSubject, string xBody, params Attachment[] xAttachments)
        {
            //SEND MAIL
            if (Client.Credentials == null) { BTCSharp.Client.Console("[Mail] Error: login needed"); return false; }
            try
            {
                MailMessage mail = new MailMessage(xFrom, xTo, xSubject, xBody);
                foreach (Attachment attachment in xAttachments) mail.Attachments.Add(attachment);
                Client.Send(mail);
                return true;
            }
            catch (Exception e)
            {
                //FOR GMAIL VISIT: https://myaccount.google.com/lesssecureapps
                Console.WriteLine("[Mail] Error: " + e.Message);
                return false;
            }
        }

        public static void Send(string xTo, string xSubject, string xBody, params Attachment[] xAttachments)
        {
            //SEND MAIL
            Send(From, xTo, xSubject, xBody, xAttachments);
        }
    }
}

Как использовать:

Attachment attachment = new Attachment(path);
                Mail.Login("mail.server", 25, "mail@adress.com", "username", "pw", false);
                Mail.Send("mail.receiver@gmail.com", "text", attachment);
                attachment.Dispose();
...