Smtpクライアントを使用してメールを送信できません。コードは次のとおりです。
SmtpClient client=new SmtpClient("Host");
client.Credentials=new NetworkCredential("username", "password");
MailMessage mailMessage = new MailMessage();
mailMessage.from="[email protected]";
mailMessage.To.Add("[email protected]");
mailMessage.body="body";
mailMessage.subject="subject";
client.Send(mailMessage);
問題は、ASP.NETアプリケーションでこのコードを使用すると、メールが届かないことです。 asp.netで、メールアドレスをNetworkCredentialで指定されたユーザー名に変更すると、メールが届きます。
しかし、C#Windowsアプリケーションでは、送信者の電子メールアドレスが有効でない場合でも、電子メールを取得できます。
'UseDefaultCredentials = false' UseDefaultCredentials = false
を設定する前にSmtpClient Credentialsプロパティを設定すると、資格情報が無視されることがわかりました。
失敗:
SmtpClient smtp = new SmtpClient;
smtp.Credentials = new NetworkCredential("user","pass");
smtp.UseDefaultCredentials = false;
作品:
SmtpClient smtp = new SmtpClient;
smtp.UseDefaultCredentials = false;
smtp.Credentials = new NetworkCredential("user","pass");
図を移動します。
**更新**
ここで順序が重要な理由は、UseDefaultCredentials
プロパティのセッターが逆コンパイルされたコードを介してCredentials
をnull
に実際に設定するためです。
/// <summary>Gets or sets a <see cref="T:System.Boolean" /> value that controls whether the <see cref="P:System.Net.CredentialCache.DefaultCredentials" /> are sent with requests.</summary>
/// <returns>
/// <see langword="true" /> if the default credentials are used; otherwise <see langword="false" />. The default value is <see langword="false" />.</returns>
/// <exception cref="T:System.InvalidOperationException">You cannot change the value of this property when an e-mail is being sent.</exception>
public bool UseDefaultCredentials
{
get
{
return this.transport.Credentials is SystemNetworkCredential;
}
set
{
if (this.InCall)
throw new InvalidOperationException(SR.GetString("SmtpInvalidOperationDuringSend"));
this.transport.Credentials = value ? (ICredentialsByHost) CredentialCache.DefaultNetworkCredentials : (ICredentialsByHost) null;
}
}
メールサーバーがメールリレーを許可していないことを意味します。メールサーバーでは、認証されたemail-idからのメールをユーザー名としてのみ送信できます。通常、これは、認証されたものとは異なるIDとしてメールが送信されるのを防ぐために行われます。
これを試して :
MailMessage mail = new MailMessage("emailfrom","emailto");
mail.From = new MailAddress("emailfrom");
mail.Subject = txtsbjct.Text;
string Body = txtmsg.Text;
mail.Body = Body;
mail.IsBodyHtml = true;
SmtpClient smtp = new SmtpClient();
smtp.Host = "smtp.gmail.com"; //Or Your SMTP Server Address
smtp.Credentials = new System.Net.NetworkCredential("youremail", "yourpassword");
smtp.EnableSsl = true;
smtp.Send(mail);
txtemail.Text = "";
txtmsg.Text = "";
txtsbjct.Text = "";
Label1.Text = "your email has been send";
mail = null;
smtp = null;
短い答え:。netを使用しないでください内部SMTPクライアントクラス-使用 MailKit 。
長い答え:
[System.Obsolete( "SmtpClientとそのタイプのネットワークの設計が不十分です。 https://github.com/jstedfast/MailKit および https:// github。 com/jstedfast/MimeKit 代わりに ")] public class SmtpClient:IDisposable
ドキュメントは時間の経過とともに変更される可能性があり、を読む方がよいため、ここのドキュメントからサンプルを意図的にコピーアンドペーストしませんでした。