![](/img/trans.png)
[英]Using DotNetOpenAuth as OpenID Provider in a customer httphandler assembly
[英]How to authenticate to any mail provider using DotNetOpenAuth?
我開發了一個ASP.net應用程序,可以向任何域發送電子郵件。 我正在使用一個簡單的.Net smtp客戶端:
var fromAddress = new MailAddress("mymailid@gmail.com");
var fromPassword = "xxxxxx";
var toAddress = new MailAddress("yourmailid@yourdoamain.com");
var smtpClient = new System.Net.Mail.SmtpClient
{
Host = "smtp.gmail.com",// or any others
Port = 587, // correspond to host
EnableSsl = true,
DeliveryMethod = System.Net.Mail.SmtpDeliveryMethod.Network,
UseDefaultCredentials = false,
Credentials = new NetworkCredential(fromAddress.Address, fromPassword)
};
smtpClient.Send(message)
。 但我無法使用.Net.Mail對任何現代郵件提供商(包括gmail,yahoo,yandex)進行身份驗證,因為我遇到以下異常The server response was: 5.5.1 Authentication Required
所有smtp配置都正確填寫。
如何使用DotNetOpenAuth進行身份驗證,使用.Net.Smtp進行發送電子郵件? 請舉個例子。
我會考慮你的SMTP服務器。 是否允許您發送電子郵件? 您的請求是否已發送到服務器並進行驗證? 你用Fiddler看過流量了嗎?
您可以使用SendGrid注冊一個免費帳戶,該帳戶將為您提供SMTP服務器以便為您發送電子郵件。 你真的更喜歡使用像SendGrid這樣的公司而不是gmail SMTP服務器。
除此之外, Mail4Net可能會幫助您完成代碼。
要將GMail用作SMTP服務器,您必須設置一些值:
Outgoing Mail (SMTP) Server: smtp.gmail.com
Use Authentication: Yes
Use Secure Connection: Yes (this can be TLS or SSL depending on your mail client)
Username: your GMail account, i.e. user@gmail.com
Password: your GMail password
Port: 465 or 587
您還可以將連接移動到Web或app配置文件:
<configuration>
<system.net>
<mailSettings>
<smtp deliveryMethod="network" from="pam@gmail.com">
<network
host="smtp.gmail.com"
port="465"
enableSsl="true"
userName="pam@gmail.com"
password="password"
/>
</smtp>
</mailSettings>
</system.net>
</configuration>
一旦電子郵件和憑證更新,此代碼適用於我:
try
{
var message = new MailMessage();
message.Subject = "Test email";
message.Body = "This is a test message";
message.From = new MailAddress("from@email.com");
message.To.Add(new MailAddress("to@email.com"));
var client = new SmtpClient
{
Host = "smtp.sendgrid.com",
Port = 587,
Credentials = new NetworkCredential("User_Name", "My_Password")
};
client.Send(message);
}
catch (Exception ex)
{
var msg = ex.Message;
}
確保您的SendGrid憑據正確無誤。
從評論中,我可以看到圖像 ,顯示您要做的事情:
但是,您無法知道配置將是什么,用戶將選擇不正確的配置。 如果用戶選擇TLS,您會怎么做,但郵件服務器沒有TLS支持?
我認為您需要添加“發送測試電子郵件”按鈕,以發送測試電子郵件以檢查配置。 然后,您可以顯示遇到的任何錯誤。
好的,我知道我正在添加很多答案,但是在看了幾個小時之后,這是我的發現:
The error is the client is not authenticated (5.5.1)
我收到了同樣的錯誤,然后我注意到收件箱中有一封電子郵件(很少使用gmail帳戶), Someone tried to sign in to your Google Account xxxxx@gmail.com from an app that doesn't meet modern securty standards.
您的應用是否被谷歌屏蔽: http : //security.google.com/settings/security/activity可能會顯示您的應用,但是您收到了電子郵件嗎?
此外,如果該帳戶使用兩步驗證,則不會在未設置應用專用密碼的情況下發送電子郵件: https : //support.google.com/accounts/answer/185833
我認為這是帳戶配置而不是代碼問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.