2 Câu hỏi: Gửi email qua lõi .net trên ubfox trả về lỗi base64

câu hỏi được tạo ra tại Thu, May 9, 2019 12:00 AM

Tôi gặp lỗi khi tôi cố gửi email thông qua máy chủ thử nghiệm đang chạy trên Ubuntu 16.04. Tôi có tài khoản pro trên OVH và tôi đang sử dụng smtp này:

pro1.mail.ovh.net

Khi tôi gỡ lỗi trên máy trạm đang chạy trên windows 10, tôi có thể gửi email của mình.

Đây là mã của tôi:

      var smtp = m_emailConfiguration["Smtp"];
      var email = m_emailConfiguration["Email"];
      var password = m_emailConfiguration["Password"];

      try
      {              
        using (var smtpClient = new SmtpClient(smtp, 587))
        {
          var mailMessage = new MailMessage(email, mailTo, subject, body);

          smtpClient.UseDefaultCredentials = false;
          smtpClient.Credentials = new NetworkCredential(email, password);
          smtpClient.EnableSsl = true;               
          smtpClient.Send(mailMessage);              
        }
      }
      catch (Exception ex)
      {
        throw new Exception(ex.InnerException.Message);
      }

Tôi gặp lỗi này:

The input is not a valid Base-64 string as it contains a non-base 64 character, more than two padding characters, or an illegal character among the padding characters

Theo dõi ngăn xếp đầy đủ:

Exception: System.Net.Mail.SmtpException: Failure sending mail. ---> System.FormatException: The input is not a valid Base-64 string as it contains a non-base 64 character, more than two padding characters, or an illegal character among the padding characters.
at System.Convert.FromBase64CharPtr(Char* inputPtr, Int32 inputLength)
at System.Convert.FromBase64String(String s)
at System.Net.Mail.SmtpNegotiateAuthenticationModule.GetSecurityLayerOutgoingBlob(String challenge, NTAuthentication clientContext)
at System.Net.Mail.SmtpNegotiateAuthenticationModule.Authenticate(String challenge, NetworkCredential credential, Object sessionCookie, String spn, ChannelBinding channelBindingToken)
at System.Net.Mail.SmtpConnection.GetConnection(String host, Int32 port)
at System.Net.Mail.SmtpTransport.GetConnection(String host, Int32 port)
at System.Net.Mail.SmtpClient.GetConnection()
at System.Net.Mail.SmtpClient.Send(MailMessage message)

Tôi đã tìm thấy ai đó có cùng một vấn đề: Gửi thư qua. lõi net smtpClient: SmtpException /FormatException

Nhưng vấn đề của anh ấy là mật khẩu, tôi chắc chắn rằng mật khẩu của tôi là chính xác.

Vậy có ai có ý tưởng không?

Cảm ơn

    
1
  1. Đăng toàn bộ ngoại lệ, không chỉ phần thông báo. Bạn có thể nhận được điều đó một cách dễ dàng với Exception.ToString(). Điều đó bao gồm tất cả các ngoại lệ bên trong cuộc gọi statck. Trên thực tế, có lẽ bạn nên xóa hoàn toàn khối bắt vì nó không xử lý ngoại lệ ngoài ẩn thông tin quan trọng.
    2019-05-09 09: 27: 17Z
  2. Về lỗi, nó khá rõ ràng. Chuỗi bạn đã cố gửi là xấu và ngoại lệ giải thích lý do. Bạn đã không đăng mã tạo ra chuỗi đó hoặc nội dung của nó, vì vậy không thể nói điều gì sai. Điều này ít liên quan đến SmtpClient hoặc Ubuntu
    2019-05-09 09: 28: 38Z
  3. Cuối cùng, trang tài liệu cho SmtpClient tự giải thích nó đã lỗi thời và nên được thay thế bằng MailKit . Bạn đang cố gắng gửi cái gì? MailKit có thể gửi trực tiếp tải trọng ban đầu và mã hóa nó khi cần thiết
    2019-05-09 09: 34: 43Z
  4. Ví dụ: bạn có thể thêm cả văn bản đơn giản và nội dung HTML bằng hình ảnh một cách dễ dàng bằng cách sử dụng lớp BodyBuilder .
    2019-05-09 09: 37: 07Z
  5. Bây giờ tôi thấy ngăn xếp cuộc gọi, có vẻ như SmtpClient đã cố sử dụng xác thực Windows để kết nối và đã xảy ra sự cố với mã thông báo mà nó đã cố sử dụng. Bạn có thực sự muốn khắc phục sự cố này hoặc chuyển trực tiếp sang MailKit không? Ví dụ Gửi tin nhắn trong trang đích cho thấy việc xác thực dễ dàng như thế nào.
    2019-05-09 09: 41: 18Z
2 Câu trả lời                              2                         

Hãy đặt tất cả các nhận xét trong một câu trả lời.

Đừng sử dụng SmptClient. Thay vào đó, hãy sử dụng MailKit để thay thế. SmtpClient là lỗi thời và chính Microsoft khuyến nghị sử dụng MailKit hoặc thư viện khác.

Ngăn xếp cuộc gọi cho thấy lỗi đã được nêu ra trong khi cố gắng xác thực bằng cách sử dụng xác thực Windows . Điều đó rõ ràng sai trong trường hợp này nhưng lỗi có thể sẽ không được sửa chính xác vì lớp đã lỗi thời.

Ví dụ Gửi tin nhắn hiển thị hThật dễ dàng để gửi tin nhắn:

using (var client = new SmtpClient ()) {
    // For demo-purposes, accept all SSL certificates (in case the server supports STARTTLS)
    client.ServerCertificateValidationCallback = (s,c,h,e) => true;

    client.Connect ("smtp.friends.com", 587, false);

            // Note: only needed if the SMTP server requires authentication
    client.Authenticate ("joey", "password");

    client.Send (message);
    client.Disconnect (true);
}

MailKit được xây dựng dựa trên MimeKit, điều đó có nghĩa là nó có thể tạo các thư phức tạp một cách dễ dàng. Sao chép từ http://www.mimekit.net/docs/html/Creating-Messages.htmlm#UsingBodyBuilder "rel = để tạo một thông điệp chứa cả thân văn bản đơn giản và thân HTML có hình ảnh.

BodyBuilder     
0
2019-05-09 09: 50: 31Z

Giống như Panagiotis Kanavos trong các bình luận cho biết, SmtpClient không được dùng nữa. Tôi sử dụng MailKit thay thế và hiện tại nó hoạt động tốt.

    
0
2019-05-09 10: 28: 01Z
        var message = new MimeMessage ();
        message.From.Add (new MailboxAddress ("Joey", "joey@friends.com"));
        message.To.Add (new MailboxAddress ("Alice", "alice@wonderland.com"));
        message.Subject = "How you doin?";

        var builder = new BodyBuilder ();

        // Set the plain-text version of the message text
        builder.TextBody = @"Hey Alice,
....
-- Joey
";

        // In order to reference selfie.jpg from the html text, we'll need to add it
        // to builder.LinkedResources and then use its Content-Id value in the img src.
        var image = builder.LinkedResources.Add (@"C:\Users\Joey\Documents\Selfies\selfie.jpg");
        image.ContentId = MimeUtils.GenerateMessageId ();

        // Set the html version of the message text
        builder.HtmlBody = string.Format (@"<p>Hey Alice,<br>
....
<p>-- Joey<br>
<center><img src=""cid:{0}""></center>", image.ContentId);

        // We may also want to attach a calendar event for Monica's party...
        builder.Attachments.Add (@"C:\Users\Joey\Documents\party.ics");

        // Now we just need to set the message body and we're done
        message.Body = builder.ToMessageBody ();
nguồn đặt đây