Gửi email thông qua máy chủ Gmail SMTP bằng C #


242

Vì một số lý do, cả câu trả lời được chấp nhận cũng như bất kỳ câu trả lời nào khác đều không phù hợp với tôi vì " Gửi email bằng .NET thông qua Gmail ". Tại sao họ không làm việc?

CẬP NHẬT: Tôi đã thử tất cả các câu trả lời (được chấp nhận và mặt khác) trong câu hỏi khác, nhưng không có câu trả lời nào hoạt động.

Tôi chỉ muốn biết nếu nó hoạt động cho bất kỳ ai khác, nếu không Google có thể đã thay đổi điều gì đó (điều này đã xảy ra trước đây).

Khi tôi thử đoạn mã sử dụng SmtpDeliveryMethod.Network, tôi nhanh chóng nhận được một SmtpException trên Gửi (tin nhắn). Tin nhắn là

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. Tìm hiểu thêm tại "<- nghiêm túc, nó kết thúc ở đó.

CẬP NHẬT:

Đây là một câu hỏi mà tôi đã hỏi từ lâu và câu trả lời được chấp nhận là mã mà tôi đã sử dụng nhiều, nhiều lần cho các dự án khác nhau.

Tôi đã lấy một số ý tưởng trong bài đăng này và các dự án EmailSender khác để tạo dự án EmailSender tại Codeplex . Nó được thiết kế để kiểm tra và hỗ trợ các dịch vụ SMTP yêu thích của tôi như GoDaddy và Gmail.


Tôi đã cố gắng làm điều này bằng các phương pháp tương tự trong một ngôn ngữ khác. Đã gặp loại tương tự: Các phương pháp tài liệu cũ đã hoạt động trước đây, không làm việc cho tôi. Vì vậy, bạn sẽ tự hỏi nếu google thay đổi một cái gì đó, hoặc nếu bạn đã làm điều gì đó sai.
AaronLS

2
@aaronls sự thay đổi gần đây duy nhất dường như có liên quan đến cổng 465. Tôi đã thử nó trong khi tìm kiếm một giải pháp (tôi chỉ đang làm việc trên cùng) và thời gian chờ cổng 465 luôn luôn. Nếu đó là trường hợp của bạn, hãy thử với cổng 587.
eglasius

2
Vấn đề này là do "xác minh từ" (captcha). Nếu bạn đăng nhập qua giao diện web bằng tay và điền captcha, SMTP của bạn sẽ bắt đầu hoạt động.
Robert Koritnik

4
FWIW, làm việc cho tôi. bạn cần sử dụng 587 và .EnableSSL đúng. c # 4 / .NET 4 hiện không hỗ trợ thay thế 465 / SSL. nhu cầu gmail để cấu hình các ứng dụng thư khác .
gerryLowry

1
Thực hiện theo câu trả lời @eglasius và đảm bảo bạn bật cài đặt "Cho phép ứng dụng ít bảo mật hơn" trong Gmail để cho phép gmail xác thực tài khoản của bạn.
dùng2713706

Câu trả lời:


290

CVertex, đảm bảo xem lại mã của bạn và nếu điều đó không tiết lộ bất cứ điều gì, hãy đăng nó. Tôi chỉ kích hoạt tính năng này trên một trang web ASP.NET thử nghiệm mà tôi đang làm việc và nó hoạt động.

Trên thực tế, tại một số thời điểm tôi đã có một vấn đề về mã của tôi. Tôi đã không phát hiện ra nó cho đến khi tôi có một phiên bản đơn giản hơn trên một chương trình điều khiển và thấy nó đang hoạt động (không có thay đổi nào về phía Gmail như bạn lo lắng). Mã dưới đây hoạt động giống như các mẫu bạn đã đề cập:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net.Mail;
using System.Net;

namespace ConsoleApplication2
{
    class Program
    {
        static void Main(string[] args)
        {
            var client = new SmtpClient("smtp.gmail.com", 587)
            {
                Credentials = new NetworkCredential("myusername@gmail.com", "mypwd"),
                EnableSsl = true
            };
            client.Send("myusername@gmail.com", "myusername@gmail.com", "test", "testbody");
            Console.WriteLine("Sent");
            Console.ReadLine();
        }
    }
}

Tôi cũng đã làm cho nó hoạt động bằng cách sử dụng kết hợp web.config, http://msdn.microsoft.com/en-us/l Library / w355a94k.aspx và mã (vì không có kết quả khớp EnableSsltrong tệp cấu hình :().


1
Làm việc tuyệt vời cho tôi trong một ứng dụng winforms C #. Cảm ơn, Freddy.
Andrew

13
Chỉ cần nhớ rằng mã như thế này đang truyền hiệu quả thông tin đăng nhập gmail của bạn dưới dạng văn bản thuần túy đến người dùng ...
Chris Marisic

3
thực sự có một cài đặt phù hợp cho enableSsl trong web.config, xem câu trả lời bên dưới
Wiebe Tijsma

4
@Zidad đã được thêm vào 4.0.
eglasius

21
Bạn cũng có thể cần kích hoạt quyền truy cập cho "ứng dụng kém an toàn" trong trang cài đặt gmail của mình: google.com/sinstall/security/lesssecururse . Điều này là cần thiết nếu bạn nhận được ngoại lệ "` Phản hồi của máy chủ là: 5.5.1 Yêu cầu xác thực.
Ravendarksky

73

NHỮNG SAU ĐÂY S AL CÒN CỐ GẮNG LÀ TRẢ LỜI CÂU HỎI CÂU HỎI CỦA BẠN NẾU TẤT CẢ CÁC ELSE ĐÃ KHÔNG CÓ :

Tôi cũng mắc một lỗi chính xác, hóa ra thuật toán đo mật khẩu mới của Google đã thay đổi vì cho rằng mật khẩu hiện tại của tôi quá yếu và không cho tôi biết điều gì về nó (thậm chí không phải là tin nhắn hay cảnh báo) ... Làm thế nào tôi phát hiện ra điều này ? Chà, tôi đã chọn thay đổi mật khẩu của mình để xem nó có giúp ích không (đã thử mọi cách khác nhưng không được) và khi tôi thay đổi mật khẩu, nó đã hoạt động!

Sau đó, để thử nghiệm, tôi đã thử thay đổi mật khẩu trở lại mật khẩu trước đó để xem điều gì sẽ xảy ra và Gmail thực sự không cho phép tôi làm điều này, với lý do "xin lỗi, chúng tôi không thể cho phép bạn lưu thay đổi này như bạn đã chọn mật khẩu quá yếu "và sẽ không cho phép tôi quay lại mật khẩu cũ. Tôi nhận ra rằng nó đã bị lỗi vì a) bạn cần thay đổi mật khẩu của mình một lần sau mỗi x số tháng hoặc b). như tôi đã nói trước đây, thuật toán độ mạnh mật khẩu của họ đã thay đổi và do đó mật khẩu yếu tôi đã không được chấp nhận, mặc dù họ không nói gì về điều này khi cố gắng đăng nhập MỌI NƠI! Đây (số 2) là kịch bản có khả năng nhất, vì mật khẩu yếu của tôi đã được khoảng 4 tháng và nó cho phép tôi sử dụng nó trong Gmail.

Thật tệ khi họ không nói gì về điều này, nhưng nó có ý nghĩa. Bởi vì hầu hết các email bị tấn công đều được đăng nhập bằng phần mềm bên ngoài gmail và tôi đoán bạn bắt buộc phải có mật khẩu mạnh hơn nếu bạn muốn sử dụng Gmail bên ngoài môi trường Gmail.

Tôi hi vọng cái này giúp được!


2
Cảm ơn, như bạn nói thay đổi mật khẩu để nó mạnh và tất cả sẽ hoạt động tốt.
Gavin

1
Đây chính xác là vấn đề của tôi - tất cả các đề xuất khác là về cấu hình, nhưng cấu hình của tôi đã chính xác ngay từ đầu, nhưng tôi vẫn tiếp tục gặp lỗi. Thay đổi mật khẩu đã tạo ra sự khác biệt,
André Vermeulen

Cảm ơn, cuối cùng tôi đã có thể giải quyết được vấn đề này thay đổi mật khẩu thành phức tạp, mọi thứ đều hoạt động ngay bây giờ :)
Kirill Chilingarashvili

Cảm ơn. Tôi gặp vấn đề tương tự với tài khoản gmail của tôi không sở hữu mật khẩu. Tôi đã cập nhật nó với mã mạnh và mã của tôi đang hoạt động.
Thomas.Benz

Cảm ơn, cuối cùng, nó chỉ thay đổi mật khẩu thành mật khẩu mạnh.
Misha Beskin

66

Ngoài các bước khắc phục sự cố khác ở trên, tôi cũng muốn thêm rằng nếu bạn đã bật xác thực hai yếu tố (còn được gọi là xác minh hai bước ) trên tài khoản Gmail của bạn, bạn phải tạo mật khẩu dành riêng cho ứng dụng và sử dụng mật khẩu mới tạo mật khẩu để xác thực qua SMTP .

Để tạo một tài khoản, hãy truy cập: https://www.google.com.vn/sinstall/ và chọn Ủy quyền cho các ứng dụng & trang web để tạo mật khẩu.


1
Tôi không kích hoạt xác minh 2 bước và không quan trọng là tôi đã tạo mật khẩu an toàn như thế nào, đây là cách duy nhất tôi có thể khắc phục sự cố của mình. Tôi đã có thể sử dụng các tài khoản gmail khác mà không cần mật khẩu 2 bước và yếu hơn mà không gặp vấn đề gì ... để sử dụng tài khoản tôi thực sự muốn sử dụng, tôi phải kích hoạt 2 bước và sử dụng mật khẩu dành riêng cho ứng dụng.
Ian Robertson

Chính xác những gì tôi đang làm, nhưng vẫn cùng một lỗi: - / Nó hoạt động như mật khẩu của tôi không đủ mạnh, nhưng tôi đang sử dụng mật khẩu ứng dụng mà Gmail đã cho tôi !!!
Jerry Dodge

54
Turn On Access For Less Secure Apps and it will work for all no need to change password.

Liên kết với Cài đặt Gmail

nhập mô tả hình ảnh ở đây


1
Điều này làm việc cho tôi. Thậm chí, khi tôi cố gắng gửi email theo cách trên, tôi thực sự nhận được email từ Google nơi họ nói rõ ràng rằng họ đã chặn nỗ lực này từ ứng dụng kém an toàn hơn và họ đã đề cập đến cách này để khắc phục
Demarsch

1
Đây là chìa khóa quan trọng nhất trong câu đố vì tôi đã cài đặt mọi thiết lập khác và dường như nó không hoạt động. Ngay khi tôi có thiết lập này, nó chỉ hoạt động như một bùa mê.
Mất

1
Điều này làm việc cho tôi. Mật khẩu ứng dụng + SSL + NetworkCredentials. (VB.NET)
CrazyIvan1974

30

Tôi cũng gặp một số vấn đề khi gửi email từ tài khoản gmail của mình, nguyên nhân là do một số tình huống đã nói ở trên. Đây là một bản tóm tắt về cách tôi làm cho nó hoạt động và giữ cho nó linh hoạt cùng một lúc:

  • Trước hết hãy thiết lập tài khoản Gmail của bạn:
    • Bật IMAP và xác nhận đúng số lượng tin nhắn tối đa (bạn có thể làm như vậy tại đây)
    • Đảm bảo mật khẩu của bạn có ít nhất 7 ký tự và mạnh (theo Google)
    • Hãy chắc chắn rằng bạn không phải nhập mã captcha trước. Bạn có thể làm như vậy bằng cách gửi email kiểm tra từ trình duyệt của bạn.
  • Thực hiện các thay đổi trong web.config (hoặc app.config, tôi chưa thử điều đó nhưng tôi cho rằng thật dễ dàng để làm cho nó hoạt động trong ứng dụng Windows):
<configuration>
    <appSettings>
        <add key="EnableSSLOnMail" value="True"/>   
    </appSettings>

    <!-- other settings --> 

    ...

    <!-- system.net settings -->
    <system.net>
        <mailSettings>
            <smtp from="yourusername@gmail.com" deliveryMethod="Network">
                <network 
                    defaultCredentials="false" 
                    host="smtp.gmail.com" 
                    port="587" 
                    password="stR0ngPassW0rd" 
                    userName="yourusername@gmail.com"
                    />
                <!-- When using .Net 4.0 (or later) add attribute: enableSsl="true" and you're all set-->
            </smtp>
        </mailSettings>
    </system.net>
</configuration>
Add a Class to your project:

Imports System.Net.Mail

Public Class SSLMail

    Public Shared Sub SendMail(ByVal e As System.Web.UI.WebControls.MailMessageEventArgs)

        GetSmtpClient.Send(e.Message)

        'Since the message is sent here, set cancel=true so the original SmtpClient will not try to send the message too:
        e.Cancel = True

    End Sub

    Public Shared Sub SendMail(ByVal Msg As MailMessage)
        GetSmtpClient.Send(Msg)
    End Sub

    Public Shared Function GetSmtpClient() As SmtpClient

        Dim smtp As New Net.Mail.SmtpClient
        'Read EnableSSL setting from web.config
        smtp.EnableSsl = CBool(ConfigurationManager.AppSettings("EnableSSLOnMail"))
        Return smtp
    End Function

End Class

Và bây giờ bất cứ khi nào bạn muốn gửi email, tất cả những gì bạn cần làm là gọi SSLMail.SendMail:

ví dụ: trong Trang có kiểm soát PasswordRecovery:

Partial Class RecoverPassword
Inherits System.Web.UI.Page

Protected Sub RecoverPwd_SendingMail(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.MailMessageEventArgs) Handles RecoverPwd.SendingMail
    e.Message.Bcc.Add("webmaster@example.com")
    SSLMail.SendMail(e)
End Sub

End Class

Hoặc bất cứ nơi nào trong mã của bạn, bạn có thể gọi:

SSLMail.SendMail(New system.Net.Mail.MailMessage("from@from.com","to@to.com", "Subject", "Body"})

Tôi hy vọng điều này sẽ giúp bất cứ ai chạy vào bài viết này! (Tôi đã sử dụng VB.NET nhưng tôi nghĩ việc chuyển đổi nó sang bất kỳ ngôn ngữ .NET nào là không quan trọng.)


+1 "enableSsl =" true "- ứng dụng này hoạt động cho một ứng dụng cũ không thiết lập cụ thể thuộc tính Smtp.enableSsl mà không biên dịch lại các hội đồng. Mẹo tuyệt vời!
Metro Smurf

và đừng quên tường lửa. Cổng 587 không phải là một cổng thông thường để mở.
Guy Lowe

13
Dim SMTPClientObj As New Net.Mail.SmtpClient
SMTPClientObj.UseDefaultCredentials = False
SMTPClientObj.Credentials = New System.Net.NetworkCredential("myusername@gmail.com", "mypwd")
SMTPClientObj.Host = "smtp.gmail.com"
SMTPClientObj.Port = 587
SMTPClientObj.EnableSsl = True
SMTPClientObj.Send("myusername@gmail.com","yourusername@gmail.com","test","testbody")

Nếu bạn gặp lỗi 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.1 Yêu cầu xác thực. Tìm hiểu thêm tại" như tôi nhận được trước đây, hãy đảm bảo dòng SMTPClientObj.UseDefaultCredentials = Falsebao gồm và dòng này nên trước SMTPClientObj.Credentials.

Tôi đã thử chuyển 2 dòng này theo cách ngược lại và lỗi Yêu cầu xác thực 5.5.1 được trả về.


Đây chính xác là thứ đã xảy ra với tôi. Ai nghĩ trật tự thiết lập tài sản sẽ sửa chữa / phá vỡ mọi thứ!
Bill Yang

Đây cũng là vấn đề đối với tôi, tôi đã chuyển đổi thứ tự như đề xuất và nó hoạt động tốt - đau đầu, ugh!
eth0

13

Ồ ... Thật tuyệt vời ... Đầu tiên tôi không thể gửi email vì bất kỳ lý do nào. Nhưng sau khi tôi thay đổi trình tự của hai dòng này như dưới đây, nó hoạt động hoàn hảo.

//(1)
client.UseDefaultCredentials = true;
//(2)
client.Credentials = new System.Net.NetworkCredential("username@gmail.com", "password");

Hy vọng điều này giúp đỡ!!! :)


1
Vâng, thứ tự làm cho sự khác biệt. Đặc biệt là khi bạn đặt Thông tin xác thực thuộc tính và bạn không muốn sử dụng thông tin đăng nhập mặc định.
Stefan Cvetanovski

1
Theo tài liệu, để sử dụng Thông tin xác thực, bạn cần đặt UseDefaultCredentials = false. Tuy nhiên hai thiết lập này dường như được bí mật đan xen. Nếu bạn đặt UseDefaultCredentials thành đúng hoặc sai, nó sẽ có tác dụng phụ là đặt Thông tin xác thực thành null. Và nó xuất hiện cài đặt Thông tin xác thực có thể đặt hiệu ứng phụ UseDefaultCredentials = false. Không được ghi nhận là làm điều này mặc dù, có thể là lỗi hoặc chỉ là một nhà phát triển khập khiễng.
Aaron

10

Vấn đề không phải là một trong những khả năng kỹ thuật để gửi qua gmail. Điều đó làm việc cho hầu hết các tình huống. Nếu bạn không thể nhận được một máy để gửi, thường là do máy chưa được xác thực với con người tại các điều khiển ít nhất một lần.

Vấn đề mà hầu hết người dùng gặp phải là Google quyết định thay đổi giới hạn ra bên ngoài mọi lúc. Bạn nên luôn luôn thêm mã phòng thủ vào giải pháp của bạn. Nếu bạn bắt đầu thấy lỗi, hãy tắt tốc độ gửi của bạn và chỉ dừng gửi trong một thời gian. Nếu bạn tiếp tục cố gắng gửi Google đôi khi sẽ thêm thời gian thêm vào thời gian trì hoãn của bạn trước khi bạn có thể gửi lại.

Những gì tôi đã làm trong hệ thống hiện tại của mình là gửi với độ trễ 1,5 giây giữa mỗi tin nhắn. Sau đó, nếu tôi nhận được bất kỳ lỗi nào, dừng lại trong 5 phút và sau đó bắt đầu lại. Điều này thường hoạt động và sẽ cho phép bạn gửi tối đa giới hạn của tài khoản (lần cuối tôi kiểm tra là 2.000 để đăng nhập khách hàng hàng đầu mỗi ngày).


1
Đây chính xác là vấn đề của tôi! Khi tôi triển khai vào Sản xuất, tôi gặp sự cố và sau khi tôi đăng nhập vào Gmail trên chính máy chủ, nó bắt đầu hoạt động trở lại.
ThisGuy


9

Tôi gặp vấn đề tương tự, nhưng hóa ra là phần mềm chống vi-rút của tôi đã chặn email "spam" đi. Tắt tính năng này cho phép tôi sử dụng cổng 587 để gửi email SMTP qua GMail


Tôi đã tắt Windows Defender và nó cũng bắt đầu hoạt động.
MorioBoncz

9

Nếu không có gì khác làm việc ở đây cho bạn, bạn có thể cần cho phép truy cập vào tài khoản gmail của mình từ các ứng dụng của bên thứ ba. Đây là vấn đề của tôi. Để cho phép truy cập, hãy làm như sau:

  1. Đăng nhập vào tài khoản gmail của bạn.
  2. Truy cập trang này https://accounts.google.com/DisplayUnlockCaptcha và nhấp vào nút để cho phép truy cập.
  3. Truy cập trang này https://www.google.com.vn/sinstall/security/lesssecurur xuất hiện lại và cho phép truy cập cho các ứng dụng kém an toàn hơn.

Điều này làm việc cho tôi hy vọng nó làm việc cho người khác!


8

Tôi không chắc chắn phiên bản .NET nào được yêu cầu cho việc này vì eglasius đã đề cập không có enableSslcài đặt phù hợp (Tôi đang sử dụng .NET 4.0, nhưng tôi nghi ngờ nó hoạt động trong .NET 2.0 trở lên), nhưng cấu hình này chỉ hoạt động cho tôi (và không yêu cầu bạn sử dụng bất kỳ cấu hình lập trình nào):

<system.net>
  <mailSettings>
    <smtp from="myusername@gmail.com" deliveryMethod="Network">
      <network defaultCredentials="false" enableSsl="true" host="smtp.gmail.com" port="587" password="password" userName="myusername@gmail.com"/>
    </smtp>
  </mailSettings>
</system.net>

Trước tiên, bạn có thể phải bật POP hoặc IMAP trên tài khoản Gmail của mình: https://mail.google.com/mail/?shva=1#sinstall/fwdandpop

Tôi khuyên bạn nên thử nó với một ứng dụng thư bình thường trước ...


2
đó là bản mới 4.0, so sánh các phiên bản tại -> msdn.microsoft.com/en-us/l
Library / ms164242 (v = VS.90) .aspx

Xin chào Erebius ... OK cảm ơn vì điều đó! Lạ là họ chỉ có cách tiếp cận theo chương trình trong giai đoạn tiền 4.0. Tôi đoán tất cả chúng ta đều quên mọi thứ ngay bây giờ và sau đó :)
Wiebe Tijsma

6

@Andres Pompiglio: Đúng vậy, bạn phải thay đổi mật khẩu của mình ít nhất một lần .. mã này hoạt động tốt:

//Satrt Send Email Function
public string SendMail(string toList, string from, string ccList,
    string subject, string body)
{

    MailMessage message = new MailMessage();
    SmtpClient smtpClient = new SmtpClient();
    string msg = string.Empty;
    try
    {
        MailAddress fromAddress = new MailAddress(from);
        message.From = fromAddress;
        message.To.Add(toList);
        if (ccList != null && ccList != string.Empty)
            message.CC.Add(ccList);
        message.Subject = subject;
        message.IsBodyHtml = true;
        message.Body = body;
        // We use gmail as our smtp client
        smtpClient.Host = "smtp.gmail.com";   
        smtpClient.Port = 587;
        smtpClient.EnableSsl = true;
        smtpClient.UseDefaultCredentials = true;
        smtpClient.Credentials = new System.Net.NetworkCredential(
            "Your Gmail User Name", "Your Gmail Password");

        smtpClient.Send(message);
        msg = "Successful<BR>";
    }
    catch (Exception ex)
    {
        msg = ex.Message;
    }
    return msg;
}
//End Send Email Function

VÀ bạn có thể thực hiện cuộc gọi đến chức năng bằng cách sử dụng:

Response.Write(SendMail(recipient Address, "UserName@gmail.com", "ccList if any", "subject", "body"))

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à: Yêu cầu xác thực 5.5.1. Tìm hiểu thêm tại
Savas Adar

6

Tôi đã sử dụng kết nối VPN của công ty. Đó là lý do tại sao tôi không thể gửi email từ ứng dụng của mình. Nó hoạt động nếu tôi ngắt kết nối khỏi VPN.


5

Tôi cũng thấy rằng tài khoản tôi sử dụng để đăng nhập đã bị hủy kích hoạt bởi google vì một số lý do. Khi tôi đặt lại mật khẩu của mình (giống như trước đây), tôi có thể gửi email tốt. Tôi cũng nhận được tin nhắn 5.5.1.


5

Tôi cũng đã thử nhiều giải pháp nhưng thực hiện một số thay đổi thì nó sẽ hoạt động

host = smtp.gmail.com
port = 587
username = email@gmail.com
password = password
enabledssl = true

với các tham số trên smtpclient đang hoạt động trong gmail


5

Tôi đã nhận được cùng một lỗi và không có giải pháp nào ở trên giúp được.

Vấn đề của tôi là tôi đã chạy mã từ một máy chủ từ xa, chưa bao giờ được sử dụng để đăng nhập vào tài khoản gmail.

Tôi đã mở một trình duyệt trên máy chủ từ xa và đăng nhập vào gmail từ đó. Nó hỏi một câu hỏi bảo mật để xác minh đó là tôi vì đây là một địa điểm mới. Sau khi thực hiện kiểm tra bảo mật, tôi đã có thể xác thực thông qua mã.



4

Tôi gặp phải lỗi tương tự ( "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. Tìm hiểu thêm tại" ) và phát hiện ra rằng tôi đang sử dụng mật khẩu sai. Tôi đã sửa thông tin đăng nhập và nó được gửi chính xác.

Tôi biết điều này là muộn, nhưng có lẽ điều này sẽ giúp người khác.


4

Một điều khác mà tôi đã tìm thấy là bạn phải thay đổi mật khẩu của mình ít nhất một lần. Và thử sử dụng mật khẩu cấp an toàn (không sử dụng cùng một người dùng với mật khẩu, 123456, v.v.)


4

Một giải pháp khả thi khác cho bạn. Tôi gặp vấn đề tương tự khi kết nối với gmail qua IMAP. Sau khi thử tất cả các giải pháp mà tôi đã gặp mà bạn sẽ đọc ở đây và các nơi khác trên SO (ví dụ: bật IMAP, cho phép truy cập ít an toàn hơn vào thư của bạn, sử dụng https://accounts.google.com/b/0/displayunlockcaptcha và v.v.), tôi thực sự thiết lập một tài khoản gmail mới một lần nữa.

Trong thử nghiệm ban đầu của tôi, tài khoản gmail đầu tiên tôi đã tạo, tôi đã kết nối với tài khoản gmail chính của mình. Điều này dẫn đến hành vi thất thường trong đó tài khoản sai đã được google tham khảo. Ví dụ: chạy https://accounts.google.com/b/0/displayunlockcaptcha đã mở tài khoản chính của tôi chứ không phải tài khoản tôi đã tạo cho mục đích này.

Vì vậy, khi tôi tạo một tài khoản mới và không kết nối nó với tài khoản chính của mình, sau khi làm theo tất cả các bước thích hợp như trên, tôi thấy rằng nó hoạt động tốt!

Tôi chưa xác nhận điều này (tức là sao chép), nhưng rõ ràng nó đã làm điều đó cho tôi ... hy vọng nó có ích.


4
  1. Trước tiên hãy kiểm tra cài đặt tài khoản gmail của bạn và bật từ "Truy cập cho các ứng dụng kém an toàn hơn" nhập mô tả hình ảnh ở đây

Chúng tôi thực sự khuyên bạn nên sử dụng một ứng dụng bảo mật, như Gmail, để truy cập tài khoản của bạn. Tất cả các ứng dụng được tạo bởi Google đều đáp ứng các tiêu chuẩn bảo mật này. Mặt khác, sử dụng một ứng dụng kém an toàn hơn có thể khiến tài khoản của bạn dễ bị tổn thương. Tìm hiểu thêm.

  1. Bộ

    smtp.UseDefaultCredentials = false;

    trước

    smtp.Credentials = new NetworkCredential(fromAddress, fromPassword);

4

Một hoặc nhiều lý do là có cho những lỗi này.

  • Đăng nhập bằng Gmail của bạn (hoặc bất kỳ cái nào khác nếu) trong hệ thống cục bộ của bạn.

  • Đồng thời kiểm tra Ứng dụng kém an toàn hơn và đặt thành "Bật" ở đây là Liên kết cho GMAIL. https://www.google.com.vn/sinstall/security/lesssecur xuất hiện lại

  • kiểm tra EnableSsl trong mã Email của bạn và cũng đặt nó thành đúng.

    smtp.EnableSsl = true;
  • Đồng thời kiểm tra cổng nào bạn đang sử dụng. 25 là Toàn cầu, nhưng bạn có thể kiểm tra nó cho những người khác giống như 587. kiểm tra ở đây. Có phải tất cả các giao tiếp SMTP xảy ra trên 25?

  • NẾU BẠN TRÊN TỪ XA : Kiểm tra câu trả lời của Vlad Tamas ở trên.


Điều gì xảy ra nếu tôi không muốn bật cài đặt ứng dụng kém an toàn hơn, làm thế nào để các ứng dụng email khác làm điều này tại sao tôi không thể làm tương tự với c #?
dùng734028

3

Bạn cũng có thể kết nối qua cổng 465, nhưng do một số hạn chế của không gian tên System.Net.Mail, bạn có thể phải thay đổi mã của mình. Điều này là do không gian tên không cung cấp khả năng tạo các kết nối SSL ẩn. Điều này được thảo luận tại http://bloss.msdn.com/b/webdav_101/archive/2008/06/02/system-net-mail-with-ssl-to-authenticate-against-port-465.aspx và tôi đã cung cấp một ví dụ về cách sử dụng CDO (Đối tượng dữ liệu hợp tác) trong một cuộc thảo luận khác ( GMail SMTP thông qua lỗi C # .Net trên tất cả các cổng ).


3

Tôi đã giải quyết vấn đề này. Aparently tin nhắn đó được sử dụng trong nhiều loại lỗi. Vấn đề của tôi là tôi đã đạt tối đa 500 thư được gửi.

đăng nhập vào tài khoản và cố gắng gửi mail. Nếu đạt đến giới hạn, nó sẽ thông báo cho bạn


2

Nếu bạn đã xác minh 2 bước trên tài khoản Gmail của mình, bạn sẽ cần tạo mật khẩu Ứng dụng. https://support.google.com/accounts/answer/185833?p=app_passwords_sa&hl=en&visit_id=636903322072234863-1319515789&rd=1 Chọn Làm thế nào để tạo ra một tùy chọn mật khẩu ứng dụng và làm theo các bước được cung cấp. Sao chép và dán mật khẩu Ứng dụng đã tạo ở đâu đó vì bạn sẽ không thể khôi phục mật khẩu sau khi bạn nhấp vào XONG.


2
smtp.Host = "smtp.gmail.com"; //host name
smtp.Port = 587; //port number
smtp.EnableSsl = true; //whether your smtp server requires SSL
smtp.DeliveryMethod = System.Net.Mail.SmtpDeliveryMethod.Network;
smtp.Credentials = new NetworkCredential(fromAddress, fromPassword);
smtp.Timeout = 20000;

1

Thay đổi mật khẩu gmail của bạn và thử lại, nó sẽ hoạt động sau đó.

Không biết tại sao, nhưng mỗi khi bạn thay đổi lưu trữ, bạn phải thay đổi mật khẩu của mình.

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.