Google Appsアカウントを介してC#を介して電子メールを送信します
-
09-09-2019 - |
質問
標準のGoogleアプリアカウントがあります。 Googleアプリを介してカスタムドメインをセットアップしました。 Gmailインターフェイスを使用すると、Googleアプリを通じて電子メールを正常に送信して受信できます。ただし、コードを介して電子メールを送信したいと思います。これを試みるために、私は次のコードを試しています。
MailMessage mailMessage = new MailMessage();
mailMessage.To.Add("someone@somewhere.com");
mailMessage.Subject = "Test";
mailMessage.Body = "<html><body>This is a test</body></html>";
mailMessage.IsBodyHtml = true;
// Create the credentials to login to the gmail account associated with my custom domain
string sendEmailsFrom = "emailAddress@mydomain.com";
string sendEmailsFromPassword = "password";
NetworkCredential cred = new NetworkCredential(sendEmailsFrom, sendEmailsFromPassword);
SmtpClient mailClient = new SmtpClient("smtp.gmail.com", 587);
mailClient.EnableSsl = true;
mailClient.DeliveryMethod = SmtpDeliveryMethod.Network;
mailClient.UseDefaultCredentials = false;
mailClient.Timeout = 20000;
mailClient.Credentials = cred;
mailClient.Send(mailMessage);
送信方法に到達すると、以下を記載する例外がスローされます。
「SMTPサーバーは安全な接続を必要とするか、クライアントが認証されていません。サーバーの応答は次のとおりでした。5.5.1認証が必要です。」
Googleを介してカスタムドメインを介してメールを送信するにはどうすればよいですか?
ありがとう!
解決
コード内のすべてのSMTP設定をハードコードする必要はありません。代わりにweb.configに入れます。このようにして、必要に応じてこれらの設定を暗号化し、アプリケーションを再コンパイルせずにその場で変更できます。
<configuration>
<system.net>
<mailSettings>
<smtp from="example@domain.com" deliveryMethod="Network">
<network host="smtp.gmail.com" port="587"
userName="example@domain.com" password="password"/>
</smtp>
</mailSettings>
</system.net>
</configuration>
smtpclientでsslを有効にするためにメールを送信するときに終了します:
var message = new MailMessage("navin@php.net");
// here is an important part:
message.From = new MailAddress("example@domain.com", "Mailer");
// it's superfluous part here since from address is defined in .config file
// in my example. But since you don't use .config file, you will need it.
var client = new SmtpClient();
client.EnableSsl = true;
client.Send(message);
Gmailで認証しようとしているのと同じメールアドレスから電子メールを送信していることを確認してください。
ノート: :.NET 4.0から始めて、コードで設定するのではなく、enablessl = "true"にweb.configに挿入できます。
他のヒント
これは私がWPF 4で使用するものです
SmtpClient client = new SmtpClient();
client.Credentials = new NetworkCredential("sender_email@domain.tld", "P@$$w0rD");
client.Port = 587;
client.Host = "smtp.gmail.com";
client.EnableSsl = true;
try {
MailAddress
maFrom = new MailAddress("sender_email@domain.tld", "Sender's Name", Encoding.UTF8),
maTo = new MailAddress("recipient_email@domain2.tld", "Recipient's Name", Encoding.UTF8);
MailMessage mmsg = new MailMessage(maFrom.Address, maTo.Address);
mmsg.Body = "<html><body><h1>Some HTML Text for Test as BODY</h1></body></html>";
mmsg.BodyEncoding = Encoding.UTF8;
mmsg.IsBodyHtml = true;
mmsg.Subject = "Some Other Text as Subject";
mmsg.SubjectEncoding = Encoding.UTF8;
client.Send(mmsg);
MessageBox.Show("Done");
} catch (Exception ex) {
MessageBox.Show(ex.ToString(), ex.Message);
//throw;
}
ファイアウォールとアンチウイルスに注意してください。これらの不気味なことは、電子メールの送信アプリケーションをブロックする傾向があります。 McAfee Enterpriseを使用しているので、実行可能ファイル名(Bazarのように。* Bazar.exeとbazar.vshost.exeの両方)を追加する必要があります...
ポートを465に変更します
何もする必要はありません。現在のアカウントに最初にログインして、指示に従ってください。
あなたの問題は解決します。 Googleアプリでアカウントを作成したが、ログインしなかったために発生します。ログインして指示に従って、試してみてください。
私のコードは、ポート= 587でTLSを使用してsmtp.google.comに接続しています(SSLはポート465である必要があります)が、それでもenablessl = trueが必要です
SmtpClient smtp = new SmtpClient();
smtp.Host = "smtp.gmail.com";
smtp.Port = 587;
smtp.EnableSsl = true;
smtp.UseDefaultCredentials = false;
NetworkCredential credentials = new NetworkCredential();
credentials.UserName = "INSERT EMAIL";
credentials.Password = "INSERT PASSWORD";
smtp.Credentials = credentials;
MailAddress addressFrom = new MailAddress(credentials.UserName);
MailAddress addressTo = new MailAddress("INSERT RECIPIENT");
MailMessage msg = new MailMessage(addressFrom, addressTo);
msg.Subject = "SUBJECT"
msg.Body = "BODY";
smtp.Send(msg);
Gスイートアカウントのこれらの重要な前提条件に注意してください
- 使用するユーザー名が、最初にサインインするときに表示されるCaptcha Word検証テストをクリアしたことを確認してください。
- アカウントに安全なパスワードがあることを確認します - https://support.google.com/accounts/answer/32040
- 目的のアカウントに対して、より安全なアプリが有効になっていることを確認してください - https://support.google.com/a/answer/6260879