60

新しいOffice365ベータ版をテストしており、ExchangeOnlineサービスにメールアカウントを持っています。現在、テストアカウントからSMTPメールを送信できるLOBアプリケーションに接続しようとしています。

ただし、Exchange 365プラットフォームではポート587でTLS暗号化が必要であり、System.Net.Mail暗黙的なSSL暗号化を許可しない「機能」があります。

誰かがこのプラットフォームを介してC#でメールを送信することに成功しましたか?

私はメールを送るべき次の基本的なコードを持っています-どんなアドバイスもいただければ幸いです。

SmtpClient server = new SmtpClient("ServerAddress");
server.Port = 587;
server.EnableSsl = true;
server.Credentials = new System.Net.NetworkCredential("username@mydomain.com", "password");
server.Timeout = 5000;
server.UseDefaultCredentials = false;

MailMessage mail = new MailMessage();
mail.From = new MailAddress("recipent@anyaddress");
mail.To.Add("username@mydomain.com");
mail.Subject = "test out message sending";
mail.Body = "this is my message body";
mail.IsBodyHtml = true;

server.Send(mail);
4

8 に答える 8

15

簡単な回答: FROM アドレスは、送信元のアカウントと正確に一致する必要があります。そうしないと、エラー 5.7.1 クライアントには、この送信者として送信する権限がありません。

私の推測では、Office 365 アカウントを使用した電子メールのなりすましを防ぐことができます。それ以外の場合は、sballmer@microsoft.com として送信できる可能性があります。

試してみるもう1つのことは、認証で、次のように3番目のフィールドにドメインを入力します

Dim smtpAuth = New System.Net.NetworkCredential(
    "TheDude", "hunter2password", "MicrosoftOffice365Domain.com")

それでもうまくいかない場合は、 https ://portal.microsoftonline.com でアカウントにログインできることを再確認して ください。

さらに注意すべきことは、ウイルス対策ソリューションがスパム対策ソリューションとしてポート 25 および 587 へのプログラムによるアクセスをブロックしている可能性があることです。Norton と McAfee は、これらのポートへのアクセスを黙ってブロックする場合があります。メールとソケットのデバッグを有効にするだけで、これに気付くことができます (以下を参照)。

最後に、SendメソッドはAsynchronousです。電話すれば

廃棄
send を呼び出した直後は、メールが送信される前に接続を閉じる可能性が高くなります。smtpClient インスタンスに OnSendCompleted イベントをリッスンさせ、そこから dispose を呼び出します。代わりに SendAsync メソッドを使用する必要があります。Send メソッドはこのイベントを発生させません。


詳細な回答: Visual Studio (VB.NET または C# は関係ありません) を使用して、上記と同様に、メール メッセージを作成するボタンを備えた単純なフォームを作成しました。次に、これを application.exe.config (プロジェクトの bin/debug ディレクトリ内) に追加しました。これにより、[出力] タブに詳細なデバッグ情報が表示されます。

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <system.diagnostics>
        <sources>
            <source name="System.Net">
                <listeners>
                    <add name="System.Net" />
                </listeners>
            </source>
            <source name="System.Net.Sockets">
                <listeners>
                    <add name="System.Net" />
                </listeners>
            </source>
        </sources>
        <switches>
            <add name="System.Net" value="Verbose" />
            <add name="System.Net.Sockets" value="Verbose" />
        </switches>
        <sharedListeners>
            <add name="System.Net"
              type="System.Diagnostics.TextWriterTraceListener"
              initializeData="System.Net.log"
            />
        </sharedListeners>
        <trace autoflush="true" />
    </system.diagnostics>
</configuration>
于 2012-07-13T04:31:04.300 に答える
10

Office 365 は、smtp サーバーと保護拡張サーバーの 2 つのサーバーを使用します。

最初のサーバーは smtp.office365.com (smtp クライアントのプロパティ Host) で、2 番目のサーバーは STARTTLS/smtp.office365.com (smtp クライアントのプロパティ TargetName) です。もう 1 つのことは、set networkcredentials の前に Usedefaultcredential =false を設定する必要があることです。

    client.UseDefaultCredentials = False
    client.Credentials = New NetworkCredential("user@domain.com", "Password")
    client.Host = "smtp.office365.com"
    client.EnableSsl = true
    client.TargetName = "STARTTLS/smtp.office365.com"
    client.Port = 587

    client.Send(mail)
于 2015-07-24T08:31:46.357 に答える
8

これを見たことがありますか? Smtp.mail.microsoftonline.com を使用して電子メールを送信する

Credentials を設定した後に UseDefaultCredentials を設定すると、Credentials プロパティがリセットされます。

于 2011-11-01T13:25:05.767 に答える
-2

最後に、動作します!

その後smtpClient.UseDefaultCredentials = false;smtpClient.Credentials = credentials; 問題は解決しました!

            SmtpClient smtpClient = new SmtpClient(smtpServerName);                          
            System.Net.NetworkCredential credentials = new System.Net.NetworkCredential(smtpUName, smtpUNamePwd);

            smtpClient.Credentials = credentials;
            smtpClient.UseDefaultCredentials = false;  <-- Set This Line After Credentials

            smtpClient.Send(mailMsg);
            smtpClient = null;
            mailMsg.Dispose();
于 2012-11-28T00:21:33.747 に答える