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.)