Máy chủ SMTP yêu cầu kết nối an toàn hoặc máy khách chưa được xác thực. Phản hồi của máy chủ là: 5.5.1 Yêu cầu xác thực?


110

Tôi muốn gửi email từ ứng dụng của mình và tôi đã viết mã sau để gửi thư

    MailMessage msg = new MailMessage();

    msg.From = new MailAddress("mymailid");
    msg.To.Add("receipientid");
    msg.Subject = "test";
    msg.Body = "Test Content";
    msg.Priority = MailPriority.High;

    SmtpClient client = new SmtpClient();

    client.Credentials = new NetworkCredential("mymailid", "mypassword", "smtp.gmail.com");
    client.Host = "smtp.gmail.com";
    client.Port = 587;
    client.DeliveryMethod = SmtpDeliveryMethod.Network;
    client.EnableSsl = true;
    client.UseDefaultCredentials = true;

    client.Send(msg);

Tôi đang chạy nó trên localhost nên tôi đang làm gì để gửi nó.

Khi tôi gửi nút nó báo lỗi như

Máy chủ SMTP yêu cầu kết nối an toàn hoặc máy khách chưa được xác thực. Phản hồi của máy chủ là: 5.5.1 Yêu cầu xác thực.

Mã trong tệp Web.config

 <appSettings>
    <add key="webpages:Version" value="2.0.0.0" />
    <add key="webpages:Enabled" value="false" />
    <add key="PreserveLoginUrl" value="true" />
    <add key="ClientValidationEnabled" value="true" />
    <add key="UnobtrusiveJavaScriptEnabled" value="true" />   
    <add key="smtpServer" value="smtp.gmail.com" />
    <add key="EnableSsl" value = "true"/>
    <add key="smtpPort" value="587" />
    <add key="smtpUser" value="sender@gmail.com" />
    <add key="smtpPass" value="mypassword" />
    <add key="adminEmail" value="sender@gmail.com" />
  </appSettings>
  <system.net>
    <mailSettings>
      <smtp from="sender@gmail.com">
        <network host="smtp.gmail.com" password="mypassword" port="587" userName="sender@gmail.com"  enableSsl="true"/>
      </smtp>
    </mailSettings>
  </system.net>

Tôi phải làm gì để giải quyết lỗi này và gửi mail ??


có thể trùng lặp của Sending email trong NET thông qua Gmail
La Mã R.

Tôi nghĩ bạn cũng có thể phải xem câu trả lời này: stackoverflow.com/a/9572958/1136253
mrbengi 22/09/13

Tôi đã từng gặp vấn đề tương tự. kiểm tra [bài đăng này] [1] [1]: stackoverflow.com/a/20186909/709340
Moslem Hady 27/11/13

Bạn nên cân nhắc để xác định dữ liệu cấu hình SMTP trong tập tin cấu hình và không ghi đè lên chúng trong một mã số - xem dữ liệu cấu hình SMTP tại systemnetmail.com/faq/4.1.aspx
Michael Freidgeim

Câu trả lời:


62

Đầu tiên hãy kiểm tra các vấn đề liên quan đến bảo mật của gmail. Có thể bạn đã bật xác thực kép trong gmail. Đồng thời kiểm tra hộp thư đến gmail của bạn nếu bạn nhận được bất kỳ cảnh báo bảo mật nào. Trong những trường hợp như vậy, hãy kiểm tra câu trả lời khác của @mjb như bên dưới

Dưới đây là điều chung chung mà tôi luôn kiểm tra đầu tiên cho các vấn đề như vậy

client.UseDefaultCredentials = true;

đặt nó thành false.

Lưu ý câu trả lời của @Joe King - bạn phải đặt client.UseDefaultCredentials trước khi đặt client.


2
Trong trường hợp đó, bạn nên chia sẻ mã của mình. Câu trả lời ở trên là dành cho các mã trong câu hỏi
Ronak Patel

7
Lưu ý @Joe King câu trả lời - bạn phải thiết lập client.UseDefaultCredentials trước khi bạn thiết lập client.Credentials
Aaron

1
Câu trả lời này sẽ không hoạt động, tôi nghĩ hầu hết mọi người đều gặp phải vấn đề bảo mật trên gmail. xem câu trả lời MJB cho một giải pháp thích hợp
Jerry Liang

2
Ngoài ra, hãy chắc chắn rằng "Captcha" bị vô hiệu hóa - điều này có thể cần thiết nếu bạn đang chạy các script trên một máy chủ từ xa (không cần thiết khi chạy trên máy tính cục bộ): accounts.google.com/DisplayUnlockCaptcha
Jens

3
Thiết lập client.UseDefaultCredentials = false; trước client.Credentials và thiết lập client.EnableSsl = true; đã làm thủ thuật trong trường hợp của tôi.
Xếp chồng vào

139

Tôi có cùng một vấn đề.

Tôi đã tìm thấy giải pháp này:

Google có thể chặn các nỗ lực đăng nhập từ một số ứng dụng hoặc thiết bị không sử dụng các tiêu chuẩn bảo mật hiện đại. Vì các ứng dụng và thiết bị này dễ dàng xâm nhập hơn, nên việc chặn chúng sẽ giúp giữ cho tài khoản của bạn an toàn hơn.

Một số ví dụ về ứng dụng không hỗ trợ các tiêu chuẩn bảo mật mới nhất bao gồm:

  • Ứng dụng Thư trên iPhone hoặc iPad của bạn chạy iOS 6 trở xuống
  • Ứng dụng Thư trên điện thoại Windows của bạn trước bản phát hành 8.1
  • Một số ứng dụng thư trên máy tính để bàn như Microsoft Outlook và Mozilla Thunderbird

Do đó, bạn phải bật Đăng nhập kém an toàn (hoặc Quyền truy cập ứng dụng kém an toàn hơn ) trong tài khoản google của mình.

Sau khi đăng nhập vào tài khoản google, hãy truy cập:

https://www.google.com/settings/security/lesssecureapps
hoặc
https://myaccount.google.com/lesssecureapps

Trong C #, bạn có thể sử dụng mã sau:

using (MailMessage mail = new MailMessage())
{
    mail.From = new MailAddress("email@gmail.com");
    mail.To.Add("somebody@domain.com");
    mail.Subject = "Hello World";
    mail.Body = "<h1>Hello</h1>";
    mail.IsBodyHtml = true;
    mail.Attachments.Add(new Attachment("C:\\file.zip"));

    using (SmtpClient smtp = new SmtpClient("smtp.gmail.com", 587))
    {
        smtp.Credentials = new NetworkCredential("email@gmail.com", "password");
        smtp.EnableSsl = true;
        smtp.Send(mail);
    }
}

-------------------
Thông tin được chia sẻ bởi Michael Freidgeim trong khu vực nhận xét bên dưới:
Câu trả lời tương tự với ảnh chụp màn hình https://stackoverflow.com/a/32457468/52277


1
Điều này cùng với việc đảm bảo rằng SSL được kích hoạt trong các mã đã làm việc kỳ diệu, thanks a lot
Crouch

1
Hơn bạn @mjb vì đã chia sẻ câu trả lời. Nó cứu cuộc sống của tôi :)
Mayeed vào

3
đây phải là câu trả lời được chọn
thatOneGuy

2
Đây là vấn đề của tôi, cảm ơn bạn đã vượt qua khó khăn và đưa ra câu trả lời giải thích rõ ràng hơn.
Bojan

Làm việc cho tôi là tốt. Cảm ơn @mjb
Rajbir Jawanda

44

Đảm bảo bạn đã đặt SmtpClient.Credentials sau khi gọi SmtpClient.UseDefaultCredentials = false.

Thứ tự rất quan trọng vì cài đặt SmtpClient.UseDefaultCredentials = falsesẽ đặt lại SmtpClient.Credentialsthành null.


2
Tôi đã tìm kiếm giải pháp cho điều này trong nửa giờ, của bạn là bài đăng nhỏ duy nhất trên internet mà tôi tìm thấy đề cập đến thứ tự của điều này. Cảm ơn bạn đời.

4
@Joe King Bạn đúng là người bạn đời tuyệt vời ..... đã tìm kiếm điều này từ 3 giờ đồng hồ :)
Jatin

1
Cảm ơn @Joe King, đây là thông tin quan trọng còn thiếu trong tài liệu MS. Đây cũng là giải pháp cho vấn đề của tôi khi gửi với tên người dùng và mật khẩu.
Aaron

1
Điều này dễ bị bỏ qua nhưng thứ tự rất quan trọng như tôi vừa phát hiện ra.
GatesĐăng ký

1
vâng. đã cứu ngày của tôi. bạn cần gọi UseDefaultCredentials = false trước khi đặt Thông tin đăng nhập.
Rendel

33

Tôi đã tìm kiếm và thử những thứ khác nhau trong nhiều giờ .. Tóm lại, tôi phải cân nhắc những điểm sau:

  1. Sử dụng smtp.gmail.comthay vìsmtp.google.com
  2. Sử dụng cổng 587
  3. Đặt client.UseDefaultCredentials = false;trước khi đặt thông tin xác thực
  4. Bật Quyền truy cập cho các ứng dụng kém an toàn hơn
  5. Bộ client.EnableSsl = true;

Nếu các bước này không hữu ích, hãy kiểm tra câu trả lời này .
Có lẽ, bạn cũng có thể tìm thấy điều gì đó hữu ích trên Câu hỏi thường gặp về System.Net.Mail này .


1
Câu trả lời này rất hữu ích ... đã giải quyết được vấn đề của tôi. Cảm ơn rất nhiều
Hari

1
nếu nó vẫn không hoạt động, hãy truy cập vào liên kết này g.co/allowaccess và cho phép truy cập
Portekoi

1
"Quyền truy cập cho các ứng dụng kém an toàn hơn" đã cứu một ngày của tôi.
Romil Kumar Jain

1
Phần này đã làm điều đó cho tôi: "Bật Quyền truy cập cho các ứng dụng kém an toàn hơn". Cảm ơn!
Tadej

11

Cố gắng đăng nhập vào tài khoản gmail của bạn. nó sẽ bị khóa nếu bạn gửi email bằng cách sử dụng SMTP gmail. Tôi không biết giới hạn email bạn có thể gửi trước khi nó bị khóa nhưng nếu bạn đăng nhập một lần thì nó sẽ hoạt động trở lại từ mã. đảm bảo cài đặt webconfig của bạn tốt.


Câu trả lời tốt nhất thực sự! Tôi đã đăng nhập lại và nó hoạt động! Tái
bút

Tôi gặp lỗi này vì tài khoản Google của tôi được bảo vệ bằng xác thực hai yếu tố. Tôi đã kết thúc việc tạo một tài khoản chuyên dụng để gửi email từ đó.
MvdD

8

Hãy thử theo cách này, tôi chỉ thực hiện một số thay đổi nhẹ:

MailMessage msg = new MailMessage();

msg.From = new MailAddress("mymailid@gmail.com");
msg.To.Add("receipientid@gmail.com");
msg.Subject = "test";
msg.Body = "Test Content";
//msg.Priority = MailPriority.High;


using (SmtpClient client = new SmtpClient())
{
    client.EnableSsl = true;
    client.UseDefaultCredentials = false;
    client.Credentials = new NetworkCredential("mymailid@gmail.com", "mypassword");
    client.Host = "smtp.gmail.com";
    client.Port = 587;
    client.DeliveryMethod = SmtpDeliveryMethod.Network;

    client.Send(msg);
}

Ngoài ra, vui lòng hiển thị tệp app.config của bạn, nếu bạn có cài đặt thư ở đó.


Tôi vẫn chưa định cấu hình trong đó. tôi nên viết gì ở đó?
Abhay Andhariya

không có tệp app.config trong ứng dụng mvc của tôi.
Abhay Andhariya

Tôi đã thử nhiều giải pháp khác, nhưng chỉ giải pháp này hoạt động. Cảm ơn
Adil Malik


3

Tôi gặp phải vấn đề tương tự ngay cả khi tôi đặt "UseDefaultCredentials" thành false. Sau đó, tôi phát hiện ra rằng nguyên nhân sâu xa là do tôi đã bật "Xác minh 2 bước" trong tài khoản của mình. Sau khi tôi tắt nó đi, sự cố đã biến mất.


4
Đừng tắt xác minh 2 bước. Nó ở đó là có lý do. Bạn có thể tạo mật khẩu dành riêng cho ứng dụng trong cài đặt GMail và sử dụng mật khẩu đó trong SmtpClient. Bạn nên làm điều đó bất chấp thay vì để lộ mật khẩu thông thường.
Daniel Dyson

3

Bật ứng dụng kém an toàn hơn từ liên kết này và bùng nổ ...


Điều này đã làm việc cho tôi .. Đây phải là câu trả lời được chấp nhận
Noman

2

nhập mô tả hình ảnh ở đây Đảm bảo cho phép Access ứng dụng kém an toàn hơn.

        MailMessage mail = new MailMessage();
        mail.From = new MailAddress("xx@gmail.com");
        mail.Sender = new MailAddress("xx@gmail.com");
        mail.To.Add("external@emailaddress");
        mail.IsBodyHtml = true;
        mail.Subject = "Email Sent";
        mail.Body = "Body content from";

        SmtpClient smtp = new SmtpClient("smtp.gmail.com", 587);
        smtp.UseDefaultCredentials = false;

        smtp.Credentials = new System.Net.NetworkCredential("xx@gmail.com", "xx");
        smtp.DeliveryMethod = SmtpDeliveryMethod.Network;
        smtp.EnableSsl = true;

        smtp.Timeout = 30000;
        try
        {

            smtp.Send(mail);
        }
        catch (SmtpException e)
        {
            textBox1.Text= e.Message;
        }

1
Các liên kết đến chuyển đổi các thiết lập cho "Truy cập ứng dụng kém an toàn" là ở đây - google.com/settings/security/lesssecureapps Thay đổi các thiết lập không giúp tôi vượt qua những lỗi
mvark

1

Dưới đây là mã của tôi. Tôi cũng gặp lỗi tương tự nhưng vấn đề là tôi đã nhập sai mật khẩu của mình. Mã dưới đây sẽ hoạt động hoàn hảo..Hãy thử nó

            MailMessage mail = new MailMessage();
            SmtpClient SmtpServer = new SmtpClient("smtp.gmail.com");              
            mail.From = new MailAddress("fromaddress@gmail.com");
            mail.To.Add("toaddress1@gmail.com");
            mail.To.Add("toaddress2@gmail.com");
            mail.Subject = "Password Recovery ";
            mail.Body += " <html>";
            mail.Body += "<body>";
            mail.Body += "<table>";

            mail.Body += "<tr>";
            mail.Body += "<td>User Name : </td><td> HAi </td>";
            mail.Body += "</tr>";

            mail.Body += "<tr>";
            mail.Body += "<td>Password : </td><td>aaaaaaaaaa</td>";
            mail.Body += "</tr>";

            mail.Body += "</table>";
            mail.Body += "</body>";
            mail.Body += "</html>";

            mail.IsBodyHtml = true;
            SmtpServer.Port = 587;
            SmtpServer.Credentials = new System.Net.NetworkCredential("sendfrommailaddress.com", "password");
            SmtpServer.EnableSsl = true;

            SmtpServer.Send(mail);

Bạn có thể giới thiệu nó trong Gửi thư


1

Nếu là tài khoản google mới, bạn phải gửi email (tài khoản đầu tiên) thông qua giao diện người dùng thông thường. Sau đó, bạn có thể sử dụng ứng dụng / rô bốt của mình để gửi tin nhắn.


1

Bạn nên cân nhắc chỉ định dữ liệu cấu hình SMTP trong tệp cấu hình và không ghi đè chúng trong mã - xem dữ liệu cấu hình SMTP tại http://www.systemnetmail.com/faq/4.1.aspx

<system.net>
            <mailSettings>
                <smtp deliveryMethod="Network" from="admin@example.com">
                    <network defaultCredentials="false" host="smtp.example.com" port="25" userName="admin@example.com" password="password"/>
                </smtp>
            </mailSettings>
        </system.net>

1

Tôi đã gặp phải vấn đề tương tự vài lần. Sau khi bật tùy chọn ứng dụng kém an toàn hơn, sự cố đã được giải quyết. Bật ứng dụng kém an toàn hơn từ đây: https://myaccount.google.com/lesssecureapps

hy vọng điều này sẽ giúp.



0

một số máy chủ smtp (máy chủ an toàn) yêu cầu bạn cung cấp cả tên người dùng và email, nếu gmail của nó thì rất có thể đó là vấn đề 'Đăng nhập kém an toàn hơn' mà bạn cần giải quyết, nếu không bạn có thể thử:

public static void SendEmail(string address, string subject, 
    string message, string email, string username, string password, 
    string smtp, int port)
{
    var loginInfo = new NetworkCredential(username, password);
    var msg = new MailMessage();
    var smtpClient = new SmtpClient(smtp, port);

    msg.From = new MailAddress(email);
    msg.To.Add(new MailAddress(address));
    msg.Subject = subject;
    msg.Body = message;
    msg.IsBodyHtml = true;

    smtpClient.EnableSsl = true;
    smtpClient.UseDefaultCredentials = false;
    smtpClient.Credentials = loginInfo;
    smtpClient.Send(msg);
}

nhận thấy rằng email từ và tên người dùng khác nhau không giống như một số triển khai đề cập đến chúng giống nhau.

gọi phương thức này có thể được thực hiện như vậy:

SendEmail("to-mail@gmail.com", "test", "Hi it worked!!", 
   "from-mail", "from-username", "from-password", "smtp", 587);

0

Sau khi bật tùy chọn kém an toàn hơn và thử các giải pháp khác, nếu bạn vẫn gặp phải vấn đề tương tự, hãy thử sử dụng quá tải này:

client.Credentials = new NetworkCredential("mymailid", "mypassword");

thay vì:

client.Credentials = new NetworkCredential("mymailid", "mypassword", "smtp.gmail.com");

0

Tôi đã tạo đăng ký Microsoft 365 Developer (E5) vào sáng hôm nay và sử dụng đăng ký này để gửi email thử nghiệm bằng các cài đặt sau

using (SmtpClient client = new SmtpClient())
{
    client.EnableSsl = true;
    client.UseDefaultCredentials = false;
    client.Credentials = new NetworkCredential(username, password);
    client.Host = "smtp.office365.com";
    client.Port = 587;
    client.DeliveryMethod = SmtpDeliveryMethod.Network;

    client.Send(msg);
}

Nó không hoạt động ngay từ đầu, vì tôi liên tục nhận được thông báo lỗi này với ngoại lệ do mã này ném ra. Sau đó, tôi đã dành hơn 4 giờ chơi với cài đặt trung tâm quản trị Microsoft 365 và đọc các bài báo để tìm ra vấn đề. Cuối cùng, tôi đã thay đổi mật khẩu trung tâm quản trị Microsoft 365 của mình và nó hoạt động như một sự quyến rũ. Vì vậy, bạn nên thử thay đổi mật khẩu khi nhận được thông báo này, trước khi nghĩ đến bất kỳ giải pháp ứng dụng nào.

Lưu ý rằng chắc chắn mật khẩu không hợp lệ khi tôi đăng nhập vào tài khoản Microsoft 365 của mình mà không gặp bất kỳ sự cố nào. tuy nhiên, việc thay đổi mật khẩu đã giải quyết được vấn đề.


-1

Tôi cũng gặp phải vấn đề như 'Máy chủ SMTP yêu cầu kết nối an toàn hoặc máy khách không được xác thực. Phản hồi của máy chủ là: 5.5.0 Yêu cầu xác thực 'sau đó đã xem qua rất nhiều tài liệu trên internet nhưng nó không giúp tôi đầy đủ. Tôi đã giải quyết nó như thế nào

step1: smtp.gmail.com là máy chủ gmail vì vậy hãy vào cài đặt gmail tài khoản của bạn-> nhấp vào xem tất cả cài đặt-> Chuyển tiếp và IMAP / POP-> kiểm tra pop và imap đã được bật chưa, nếu chưa bật-> Lưu thay đổi. Bước 2 nhấp vào ảnh hồ sơ gmail của bạn-> nhấp vào Quản lý tài khoản google của bạn-> chuyển đến tab bảo mật-> kiểm tra Quyền truy cập vào ứng dụng kém an toàn hơn (tùy chọn này sẽ khả dụng nếu bạn không chọn xác minh hai bước) -> theo mặc định google sẽ đặt nó là vô hiệu hóa, làm cho nó cho phép sử dụng mật khẩu gmail thực của bạn để gửi email. lưu ý: -Kích hoạt quyền truy cập gmail cho các ứng dụng kém an toàn hơn, có thể nguy hiểm cho bạn, vì vậy tôi không khuyến nghị điều này

step3: -nếu tài khoản của bạn đã bật xác minh hai bước hoặc muốn sử dụng mật khẩu khác với Gmail của bạn Mật khẩu thực sử dụng mật khẩu ứng dụng cụ thể thì hãy thử cách này: - nhấp vào ảnh hồ sơ gmail của bạn-> nhấp vào Quản lý tài khoản google của bạn-> chuyển đến mục bảo mật tab-> tìm kiếm MẬT KHẨU ỨNG DỤNG-> chọn tên ứng dụng bất kỳ-> chọn tên thiết bị bất kỳ-> nhấp vào tạo-> sao chép mật khẩu 16 chữ số và dán vào ứng dụng của bạn, nơi bạn phải nhập mật khẩu gmail thay cho mật khẩu gmail thực của bạn.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.