none
特定のPCでアプリからメール送信できない RRS feed

  • 質問

  • SmtpClientを用いてメール送信しているアプリ(VB.NET)があります。

    何台かのPCでは問題なく動作するのですが、特定PCでのみエラーが発生します。

    例外の文面は「メールを送信できませんでした。」とだけ取得できます。

    問題のPCでのOutlook2010では、詳細設定(ポート番号等)も含めて、

    アプリと同じ内容で送受信できています。

    できているPCと問題のPCでは、設定アカウントやSMTPサーバー等同じですが

    物理的場所や接続プロバイダは異なります。

    OSはいずれもWindows10で、問題のPCにはサードパーティのウイルス対策ソフトは

    何も入っていません。

    何か考えられる原因はありませんでしょうか?


    • 編集済み ELSESatou 2019年3月12日 5:53
    2019年3月12日 5:41

回答

すべての返信

  • Excel の VBA ではなくて VB.NET ですね。
    Visual Studio Development  >  Visual Basic
    多分管理者さんが移動してくれるかな?


    例外発生した時の例外処理で、ex.ToString() したものを見れますか?※“メールを送信できませんでした。” の具体的な理由がしりたいため。ex.Message だけ見ているのかな?と思ったため。

    例:

    Try
        
        ' 本来はメール送信処理
        Throw New Exception("aaa")
        
    Catch ex As Exception
        Console.WriteLine(ex.ToString())
        とか
        System.Windows.Forms.MessageBox.Show(ex.ToString())
        とか
        System.IO.File.WriteAllText("log.txt", ex.ToString())
    End Try




    2019年3月12日 6:34
  • こんにちは。

    本質問への回答ではないのですが、SmtpClientは現在推奨されておりませんので、MailKitに置き換えることもご検討されてはいかがでしょうか。

    ・電子メールを送信するには?(MailKit編)[.NET 4.5、C#/VB]
    https://www.atmarkit.co.jp/ait/articles/1811/21/news023.html
    2019年3月12日 8:30
  • SMTPサーバーが同じで接続プロバイダーが違うのであれば、OP25Bが気になりますね。
    サブミッションポート587を使用されてみてはいかがでしょうか?


    ★良い回答には質問者は回答済みマークを、閲覧者は投票を!

    2019年3月12日 8:39
    モデレータ
  • WireShark のようなプロトコルアナライザーを使って、 SmtpClient と SMTP サーバーのコマンド/レスポンスをキャプチャーして、どうなっているのか調べてみてはいかがですか? 

    送信に成功する PC と失敗する PC の両方でキャプチャ―して結果を比較すれば、そこにたぶん解決のためのヒントが見つかると思います。

    #以下、ご参考までに事例を書くと・・・

    下の画像は Wireshark のもので、送信失敗例です。



    画像が小さくて読みづらいかもしれませんが、LOGIN 認証手続きには入るものの、 AUTH login *********** というコマンドに対して、500 authentication failed というレスポンスが帰ってきて認証失敗に終わっているのが読めるでしょうか?

    Outlook Express を使ってどうなっているか調べたところ、 AUTH LOGIN ⇒ 334 VXNlcm5hbWU6 ⇒ アカウント名 ⇒ 334 UGFzc3dvcmQ6 ⇒ パスワード ⇒ 235 Authentication successful 、とサーバーのレスポンスを待ってアカウント名とパスワードを送信する形になり認証に成功します。 当然ながら、メール送信は成功します。

    プロトコルアナライザーを使うと SmtpClient と SMTP サーバーの相性の問題というのがすぐわかって、解決策が見つかったという例です。
    • 編集済み SurferOnWww 2019年3月13日 1:05 脱字追加
    2019年3月13日 1:03
  • 質問カテゴリーの件、恐れ入ります。

    教えていただいた、ex.tostring()でやった内容は以下の通りです。

    メールを送信できませんでした。 ---> System.FormatException: メール ヘッダーに無効な文字が見つかりました。
       場所 System.Net.BufferBuilder.Append(String value, Int32 offset, Int32 count)
       場所 System.Net.Mail.EHelloCommand.PrepareCommand(SmtpConnection conn, String domain)
       場所 System.Net.Mail.EHelloCommand.Send(SmtpConnection conn, String domain)
       場所 System.Net.Mail.SmtpConnection.GetConnection(String host, Int32 port)
       場所 System.Net.Mail.SmtpTransport.GetConnection(String host, Int32 port)
       場所 System.Net.Mail.SmtpClient.GetConnection()
       場所 System.Net.Mail.SmtpClient.Send(MailMessage message)
       --- 内部例外スタック トレースの終わり ---
       場所 System.Net.Mail.SmtpClient.Send(MailMessage message)
       場所 Kyushoku.ClsPop3Mail.SendMail(String ToAddr, String Kenmei, String Honbun, String file1, String file2, String file3, String file4)

    この中の「メール ヘッダーに無効な文字」にしいて言えるのは、件名、本文、4つの添付ファイルで日本語を使っていることでしょうか。

    もちろん環境依存文字はありません。

    PC固有でこれに影響を与える何かがあるのでしょうか?

    2019年3月13日 4:25
  • ありがとうございます。

    SMTPサーバー(plala)指定の587を使っております。

    2019年3月13日 4:26
  • ありがとうございます。

    せっかくのご指導なのですが、問題のPCは客先業務PCのため、このようなツールのインストールはむずかしい状況です。

    2019年3月13日 4:28
  • ありがとうございます。

    今後のアプリ開発の参考にさせていただきますが、今回は既存アプリなので、できるだけ手を入れずに対応したい所存です。

    2019年3月13日 4:31
  • エラーメッセージでググると色々ヒットしますが、やってみました? 例えば下記:

    VB2005 smtpclient 特定PCでメール送信エラー
    https://social.msdn.microsoft.com/Forums/vstudio/ja-JP/1202d747-825c-4800-81d0-bbee3d24b184/vb2005-smtpclient?forum=vbgeneralja

    その記事では指摘の通り「マシン名に標準文字以外が使われていることによって問題が起きている可能性があります。」ということが原因だったそうです。

    「smtpclient」「メール ヘッダーに無効な文字が見つかりました」をキーワードにググると他にもいろいろヒットするので自分でもやってみてください。


    • 編集済み SurferOnWww 2019年3月13日 4:50 訂正
    • 回答としてマーク ELSESatou 2019年3月13日 6:10
    2019年3月13日 4:42
  • おかげさまで解決しました。

    原因はやはりPC名の日本語名が原因でした。

    皆様のお知恵に大変感謝いたします。

    2019年3月13日 6:09