c# - 認証 - メール 送信 プログラム




Google AppsアカウントでC#経由でメールを送信する (4)

私は標準のGoogle Appsアカウントを持っています。 Google Appsでカスタムドメインをセットアップしました。 Gmailインターフェースを使用すると、Google Appsを使用して電子メールを送受信できます。 しかし、私はコードを介して電子メールを送信したい。 これを試みるために、私は次のコードを試しています:

MailMessage mailMessage = new MailMessage();
mailMessage.To.Add("[email protected]");
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 = "[email protected]";             
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); 

Sendメソッドに達すると、次のような例外がスローされます。

"SMTPサーバーには安全な接続が必要です。または、クライアントが認証されていません。サーバーの応答は5.5.1認証が必要でした。

Googleを介してカスタムドメインからメールを送信するにはどうすればよいですか?

ありがとう!


あなたのコードにすべてのsmtp設定をハードコードする必要はありません。 代わりにweb.configに入れてください。 こうすることで、必要に応じてこれらの設定を暗号化し、アプリケーションを再コンパイルすることなくオンザフライで変更することができます。

<configuration>
  <system.net>
    <mailSettings>
      <smtp from="[email protected]" deliveryMethod="Network">
          <network host="smtp.gmail.com" port="587"
              userName="[email protected]" password="password"/>
      </smtp>
    </mailSettings>
  </system.net>
</configuration>

電子メールを送信すると、SmtpClientでSSLを有効にするだけで終了します。

var message = new MailMessage("[email protected]");
// here is an important part:
message.From = new MailAddress("[email protected]", "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以降では、コードで設定するのではなく、web.configにenableSsl = "true"を挿入することができます。


これは私がWPF 4で使うものです

SmtpClient client = new SmtpClient();
client.Credentials = new NetworkCredential("[email protected]", "[email protected]$$w0rD");
client.Port = 587;
client.Host = "smtp.gmail.com";
client.EnableSsl = true;

try {
    MailAddress
        maFrom = new MailAddress("[email protected]", "Sender's Name", Encoding.UTF8),
        maTo = new MailAddress("[email protected]", "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.exeとBazar.vshost.exeの両方にBazar。*など)を追加する必要があります。


何もする必要はありません。 初めてアカウントにログインし、指示に従ってください。

あなたの問題は解決します。 これは、あなたがGoogleアプリケーションでアカウントを作成したがログインしなかったために発生します。 ログインして指示に従ってみてください。


私のコードは、TLS for Port = 587(SSLはポート465でなければならない)を使用してsmtp.google.comに接続していますが、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 SUITEアカウントにあることに注意してください







google-apps