Tôi đang sử dụng mã sau đây để gửi email. Mã hoạt động chính xác trong Máy cục bộ của tôi. Nhưng trên máy chủ sản xuất tôi nhận được thông báo lỗi
var fromAddress = new MailAddress("[email protected]");
var fromPassword = "xxxxxx";
var toAddress = new MailAddress("[email protected]");
string subject = "subject";
string body = "body";
System.Net.Mail.SmtpClient smtp = new System.Net.Mail.SmtpClient
{
Host = "smtp.gmail.com",
Port = 587,
EnableSsl = true,
DeliveryMethod = System.Net.Mail.SmtpDeliveryMethod.Network,
UseDefaultCredentials = false,
Credentials = new NetworkCredential(fromAddress.Address, fromPassword)
};
using (var message = new MailMessage(fromAddress, toAddress)
{
Subject = subject,
Body = body
})
smtp.Send(message);
Và trên Gmail của tôi A/c tôi đã nhận được email sau khi tôi chạy mã từ máy chủ sản xuất
Chào ,
Một số người gần đây đã sử dụng mật khẩu của bạn để cố gắng đăng nhập vào Google Tài khoản mymailid @ gmail. Người này đã sử dụng một ứng dụng như vậy như một email, khách hàng hoặc thiết bị di động.
Chúng tôi đã ngăn chặn nỗ lực đăng nhập trong trường hợp đây là một tên không tặc đang cố gắng Truy cập tài khoản của bạn. Vui lòng xem lại chi tiết về nỗ lực đăng nhập:
Thứ Sáu, ngày 3 tháng 1 năm 2014 13:56:08 giờ Địa chỉ IP UTC: xxx.xx.xx.xxx (abcd.net.) Địa điểm: Philadelphia PA, Philadelphia, PA, Hoa Kỳ
Nếu bạn không nhận ra nỗ lực đăng nhập này, người khác có thể là cố gắng truy cập vào tài khoản của bạn Bạn nên đăng nhập vào tài khoản của mình và đặt lại mật khẩu của bạn ngay lập tức
Đặt lại mật khẩu
Nếu đây là bạn và bạn đang gặp sự cố khi truy cập tài khoản của mình, hoàn thành các bước khắc phục sự cố được liệt kê tại http://support.google.com/mail?p=client_login
Trân trọng, Nhóm Tài khoản Google
Điều này thường xảy ra khi bạn thử đăng nhập từ múi giờ khác hoặc Máy tính địa chỉ IP. Máy chủ sản xuất của bạn và id mail bạn đã sử dụng cả hai đều ở múi giờ khác nhau. Chọn bất kỳ một trong những giải pháp:
1) Đăng nhập vào máy chủ sản xuất thông qua truy cập từ xa và đăng nhập vào gmail một lần bằng thông tin đăng nhập của bạn. Họ sẽ yêu cầu xác nhận, xác nhận và đăng xuất.
Hoặc 2) đăng nhập gmail vào máy tính cục bộ của bạn, Thực hiện theo Link và chọn xem lại hoạt động này và thực hiện các hành động thích hợp.
Khi bạn cố gửi thư từ mã và bạn thấy lỗi "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.1 Yêu cầu xác thực", hơn lỗi có thể xảy ra do các trường hợp sau.
trường hợp 1: khi mật khẩu sai
trường hợp 2: khi bạn cố gắng đăng nhập từ một số Ứng dụng
trường hợp 3: khi bạn cố gắng đăng nhập từ tên miền khác với múi giờ/tên miền/máy tính của bạn (Đây là trường hợp trong hầu hết các tình huống khi gửi thư từ mã)
Có một giải pháp cho mỗi
giải pháp cho trường hợp 1: Nhập mật khẩu chính xác.
giải pháp 1 cho trường hợp 2 : đi tới cài đặt bảo mật tại liên kết tiếp theo https://www.google .com/settings/security/lesssecur Ứng dụng lại và cho phép các ứng dụng kém an toàn hơn. Vì vậy, bạn sẽ có thể đăng nhập từ tất cả các ứng dụng.
giải pháp 2 cho trường hợp 2 :( xem https://stackoverflow.com/a/9572958/52277 ) kích hoạt hai- xác thực yếu tố (còn gọi là xác minh hai bước) và sau đó tạo mật khẩu dành riêng cho ứng dụng. Sử dụng mật khẩu mới được tạo để xác thực qua SMTP.
giải pháp 1 cho trường hợp 3: (Điều này có thể hữu ích) bạn cần xem lại hoạt động. nhưng xem xét hoạt động sẽ không hữu ích do các tiêu chuẩn bảo mật mới nhất, liên kết sẽ không hữu ích. Vì vậy, hãy thử trường hợp dưới đây.
giải pháp 2 cho trường hợp 3 : Nếu bạn đã lưu trữ mã của mình ở đâu đó trên máy chủ sản xuất và nếu bạn có quyền truy cập vào máy chủ sản xuất, hãy kết nối máy tính từ xa với máy chủ sản xuất và thử đăng nhập một lần từ trình duyệt của máy chủ sản xuất. Điều này sẽ thêm excpetioon để đăng nhập vào google và bạn sẽ được phép đăng nhập từ mã.
Nhưng nếu bạn không có quyền truy cập vào máy chủ sản xuất. hãy thử giải pháp 3
giải pháp 3 cho trường hợp 3: Bạn phải kích hoạt đăng nhập từ múi giờ/ip khác cho tài khoản google của mình .
để thực hiện việc này, hãy theo liên kết https://g.co/allowaccess và cho phép truy cập bằng cách nhấp vào nút tiếp tục.
Và đó là nó. Bạn đi đây Bây giờ bạn sẽ có thể đăng nhập từ bất kỳ máy tính nào và bằng bất kỳ phương tiện ứng dụng nào vào tài khoản google của bạn.
Đây là một vấn đề bảo mật, Gmail theo mặc định sẽ ngăn truy cập vào tài khoản email của bạn từ các ứng dụng tùy chỉnh. Bạn có thể thiết lập nó để chấp nhận đăng nhập từ ứng dụng của bạn.
Sau khi đăng nhập vào e-mail của bạn, BẤM VÀO ĐÂY
Điều này sẽ đưa bạn đến trang sau
Sau khi dành vài giờ hôm nay để thử mọi giải pháp ở đây, tôi vẫn không thể vượt qua lỗi chính xác này. Tôi đã sử dụng gmail nhiều lần theo cách này vì vậy tôi biết đó là một thứ ngớ ngẩn, nhưng tôi không làm gì để khắc phục vấn đề. Cuối cùng tôi tình cờ tìm thấy giải pháp trong trường hợp của mình nên nghĩ rằng tôi sẽ chia sẻ.
Đầu tiên, hầu hết các câu trả lời ở trên cũng được yêu cầu, nhưng trong trường hợp của tôi, đó là một vấn đề đơn giản để đặt hàng mã trong khi tạo lớp SmtpClient.
Trong đoạn mã đầu tiên này bên dưới, hãy chú ý vị trí dòng "Thông tin xác thực = tín dụng". Việc triển khai này sẽ tạo ra lỗi được tham chiếu trong câu hỏi này ngay cả khi bạn có mọi thứ khác được thiết lập đúng.
System.Net.Mail.SmtpClient client = new System.Net.Mail.SmtpClient
{
Host = Emailer.Host,
Port = Emailer.Port,
Credentials = creds,
EnableSsl = Emailer.RequireSSL,
UseDefaultCredentials = false,
DeliveryMethod = System.Net.Mail.SmtpDeliveryMethod.Network
}
Tuy nhiên, nếu bạn di chuyển cuộc gọi setter Credentials xuống phía dưới, email sẽ được gửi mà không gặp lỗi. Tôi không thay đổi mã xung quanh ... tức là ... tên người dùng/mật khẩu, v.v ... Rõ ràng, cả EnableSSL, UseDefaultCredentials hoặc DeliveryMethod đều phụ thuộc vào Thông tin xác thực được đặt trước .... Tôi không kiểm tra tất cả để tìm ra nó là cái nào.
System.Net.Mail.SmtpClient client = new System.Net.Mail.SmtpClient
{
Host = Emailer.Host,
Port = Emailer.Port,
EnableSsl = Emailer.RequireSSL,
UseDefaultCredentials = false,
DeliveryMethod = System.Net.Mail.SmtpDeliveryMethod.Network,
Credentials = creds
}
Hy vọng điều này sẽ giúp cứu người khác một số đau đầu trong tương lai.
Xin chào, tôi có vấn đề tương tự,
những gì tôi đã làm để giải quyết nó. là để bật ứng dụng kém an toàn hơn . sau khi kết nối với tài khoản gmail của tôi. Tôi đã nhập liên kết này: https://www.google.com/sinstall/security/lesssecur Ứng dụng lại
Sau đó, tôi bật ứng dụng bảo mật và ứng dụng đã hoạt động . Nó cũng đã được nói ở trên
Chỉ cần làm theo các bước trong email google và kích hoạt các ứng dụng kém an toàn hơn.
Tôi có một mã làm việc trước đây ném lỗi này bây giờ. Không có vấn đề về mật khẩu. Không cần phải chuyển đổi tin nhắn sang base64. Hóa ra, tôi cần phải làm như sau:
Mã làm việc
public static void SendEmail(string emailTo, string subject, string body)
{
var client = new SmtpClient("smtp.gmail.com", 587)
{
Credentials = new NetworkCredential("[email protected]", "secretpassword"),
EnableSsl = true
};
client.Send("[email protected]", emailTo, subject, body);
}
Đặt "Cho phép ứng dụng kém an toàn hơn" thành BẬT (cùng trang, cần cuộn xuống dưới cùng)
Tôi đã phải đối mặt với cùng một vấn đề. Nó xảy ra khi bạn bật Xác minh 2 bước (MFA) . Chỉ cần tắt Xác minh 2 bước và vấn đề của bạn sẽ được giải quyết.
Dưới đây là mã của tôi. Tôi cũng có lỗi tương tự nhưng vấn đề là tôi đã nhập sai mật khẩu. Mã bên dưới sẽ hoạt động hoàn hảo..thử nó
MailMessage mail = new MailMessage();
SmtpClient SmtpServer = new SmtpClient("smtp.gmail.com");
mail.From = new MailAddress("[email protected]");
mail.To.Add("[email protected]");
mail.To.Add("[email protected]");
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 blog của tôi
Bạn cần bật "Cho phép ứng dụng kém an toàn hơn" từ đây https://myaccount.google.com/lesssecurur lại
Điều làm việc cho tôi là kích hoạt tùy chọn cho các ứng dụng kém an toàn hơn (tôi đang sử dụng VB.NET)
Public Shared Sub enviaDB(ByRef body As String, ByRef file_location As String)
Dim mail As New MailMessage()
Dim SmtpServer As New SmtpClient("smtp.gmail.com")
mail.From = New MailAddress("[email protected]")
mail.[To].Add("[email protected]")
mail.Subject = "subject"
mail.Body = body
Dim attachment As System.Net.Mail.Attachment
attachment = New System.Net.Mail.Attachment(file_location)
mail.Attachments.Add(attachment)
SmtpServer.Port = 587
SmtpServer.Credentials = New System.Net.NetworkCredential("user", "password")
SmtpServer.EnableSsl = True
SmtpServer.Send(mail)
End Sub
Vì vậy, hãy đăng nhập vào tài khoản của bạn và sau đó truy cập google.com/sinstall/security/lesssecur Ứng dụng lại
Tôi gặp vấn đề tương tự đối với một ứng dụng được triển khai cho Microsoft Azure.
SmtpException: Máy chủ SMTP yêu cầu kết nối an toàn hoặc khách hàng không đượ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.
Trước tiên, tôi đã phê duyệt tất cả các thiết bị không xác định (một số địa chỉ IP có nguồn gốc từ Ireland) trên trang sau (đã đăng nhập với tư cách là người dùng gmail): https://security.google.com/sinstall/u/1/security/secureaccount
Tôi đã sử dụng các cài đặt sau cho khách hàng:
var client = new SmtpClient("smtp.gmail.com");
client.Port = 587;
client.EnableSsl = true;
client.UseDefaultCredentials = false;
client.Credentials = new NetworkCredential("[email protected]", "my_password");
Nó chỉ bắt đầu hoạt động sau khi tôi đặt thuộc tính sau trên máy khách smtp:
client.TargetName = "STARTTLS/smtp.gmail.com";
Tôi đã thử tất cả các đề xuất được tìm thấy ở đây, từ việc bật các ứng dụng kém an toàn hơn, đến thử cổng 587 ... không có gì hiệu quả. Cuối cùng tôi chỉ nhận xét ra dòng UseDefaultCredentials = false
. Tất cả mọi thứ hoạt động nếu tôi không chạm vào boolean đó.
Một nhận xét từ Tomasz Madeyski là điều đã khắc phục vấn đề của tôi ... anh ta nói rằng có lỗi trên SetDefaultCredential, anh ta nói:
"Vấn đề là trong setter UseDefaultCredentials có mã này: this.transport.Credentials = value?
nếu bạn đặt smtpClient.UseDefaultCredentials = false
sau khi đặt thông tin đăng nhập ... thì dòng này được đặt thành null thông tin đăng nhập đó ...
Bạn có thể cần tạo/tạo mật khẩu APP cụ thể từ gmail . Ứng dụng hoặc tập lệnh của bạn sau đó sẽ sử dụng mật khẩu mới này thay vì mật khẩu thông thường của bạn . Mật khẩu thông thường của bạn sẽ vẫn hoạt động tốt cho bạn.
Đó là những gì đã làm cho tôi . Tôi vẫn sử dụng cùng một tài khoản email nhưng phải tạo một mật khẩu cụ thể cho ứng dụng mới.
https://support.google.com/accountsals/185833?hl=vi
Về cơ bản, bạn có thể làm điều đó tại đây: https://security.google.com/sinstall/security/apppasswords
THÁNG 11 NĂM 2018, đã thử mọi cách ở trên mà không thành công.
Dưới đây là giải pháp làm việc cuối cùng. Thật không may, nó không sử dụng SSL, nhưng nó hoạt động !!!
var fromAddress = new MailAddress([email protected], "From Name");
var toAddress = new MailAddress("[email protected]", "To Name");
const string subject = "Subject";
const string body = "Body";
var smtp = new SmtpClient
{
Host = "aspmx.l.google.com",
Port = 25,
EnableSsl = false
};
using (var message = new MailMessage(fromAddress, toAddress)
{
Subject = subject,
Body = body
})
{
smtp.Send(message);
}
Bạn nên không cho phép các ứng dụng kém an toàn hơn truy cập vào tài khoản google của bạn.
làm:
Tôi đã thực sự xem xét rất nhiều ý tưởng, giải pháp duy nhất là theo cách này (hoạt động với các Nhà cung cấp email khác nhau):
try
{
ViewProgressbar("Try to connect mail-server...", progressBar1.Value = 20);
string Host = dsProvider.Rows[y]["POP_hostOut"].ToString();
int port = int.Parse(dsProvider.Rows[y]["POP_portOut"].ToString()); //587
string[] email = von1.Split('@');
string userName = (dsProvider.Rows[y]["login"].ToString() == "email[0]@email[1]")? email[0]+"@"+email[1] : email[0];
string password = layer.getUserPassword(listSender.SelectedValue.ToString());
SmtpClient client = new SmtpClient(Host, port);
client.DeliveryMethod = SmtpDeliveryMethod.Network;
client.UseDefaultCredentials = false;
//A idea from MSDN but it not works. You got the "The server response was: 5.5.1 Authentication Required."
//System.Net.NetworkCredential myCreds = new System.Net.NetworkCredential(userName, password, Host);
//System.Net.CredentialCache cache = new System.Net.CredentialCache();
//cache.Add(Host, port, "NTLM", myCreds);
///cache.GetCredential(Host, port, "NTLM"); //NTLM
client.Credentials = new System.Net.NetworkCredential(userName, password);
client.Host = Host;
client.Port = port;
client.EnableSsl = true;
client.Send(message);
ViewProgressbar();
}
catch (SmtpException ex)...
Nếu bạn đang sử dụng gmail.
1 đăng nhập vào tài khoản của bạn
2- duyệt liên kết này liên kết
3- Cho phép các ứng dụng kém an toàn hơn: BẬT
Thưởng thức....
Tôi là một ứng dụng google cho thuê bao kinh doanh và tôi dành vài giờ qua để xử lý việc này, ngay cả khi đã có tất cả các cài đặt chính xác (smtp, port, enableSSL, v.v.). Đây là những gì đã làm việc cho tôi và các trang web đã đưa ra lỗi 5.5.1 khi cố gắng gửi email:
Sau khi làm điều này, các mẫu email của tôi từ trang web đã hoạt động trở lại. Chúc may mắn!
không đặt điểm dừng trước khi chờ smtp.SendMailAsync (mail);
:)
khi nó chờ với điểm dừng sẽ báo lỗi này khi tôi xóa điểm dừng, nó đã hoạt động