none
メールの設定について RRS feed

  • 質問

  •  Visual Web Developerでメールの送受信機能が使えるようにしたいのですが
    下記コードを実行すると
    最後の行
           mail.Send(msg)
    で「SmtpFailedRecipientsExceptionはユーザーコードによってハンドルされませんでした。」
    http://msdn.microsoft.com/ja-jp/library/system.net.mail.smtpfailedrecipientsexception.aspx
    というエラーが出てしまいます。

    下記コードの①~⑤は変更していて
    ①送信元のメールアドレス:サーバーのPCのメールアドレス
    ②送信先のメールアドレス:配信先のメールアドレス
    ③IPアドレス:スタート→接続→すべての接続の表示→ローカルエリア接続→サポートのIPアドレス
    ④SMTP認証用のID:Outlook Express→ツール→アカウント→プロパティ→サーバ→サーバー情報の送信メール(SMTP)の文字XXX.ne.jp
    ⑤SMTP認証用のパスワード:受信メールサーバーのパスワード
    のように設定しています。

    ①~⑤の設定が違うのでしょうか?また、何かたりないコードなどがあるのでしょうか?
    教えてください。よろしくお願いいたします。

    <%@ Page Language="VB" %>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <script runat="server">
        Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs)
            ' 送信メッセージを取得する
            Dim message As String = Me.Message.Text
            ' メール送信インスタンス生成
            Dim msg As New System.Net.Mail.MailMessage()
            ' メールヘッダを設定する
            msg.Headers.Add("Accept-Language", "ja-JP")
            msg.Headers.Add("Content-Language", "ja-JP")
            msg.Headers.Add("acceptlanguage", "ja-JP")
            msg.Headers.Add("Content-Type", "text/plain; charset=""iso-2022-jp""")
            msg.Headers.Add("Content-Transfer-Encoding", "quoted-printable")
            ' 送信元メールアドレスを設定する
            msg.From = New System.Net.Mail.MailAddress("①")
            ' 送信先(To)メールアドレス
            msg.[To].Add(New System.Net.Mail.MailAddress("②"))
            ' Ccメールアドレス
            msg.CC.Add(New System.Net.Mail.MailAddress(Me.Email.Text))
            ' メールタイトル(Subject)を設定する
            Dim byteSubject As Byte() = System.Text.Encoding.GetEncoding("iso-2022-jp").GetBytes("問い合わせメール")
            msg.SubjectEncoding = System.Text.Encoding.GetEncoding("iso-2022-jp")
            msg.Subject = System.Text.Encoding.GetEncoding("iso-2022-jp").GetString(byteSubject)
            ' メール本文を設定する
            Dim byteBody As Byte() = System.Text.Encoding.GetEncoding("iso-2022-jp").GetBytes(message)
            msg.BodyEncoding = System.Text.Encoding.GetEncoding("iso-2022-jp")
            msg.Body = System.Text.Encoding.GetEncoding("iso-2022-jp").GetString(byteBody)
            ' SMTP Authを使っているメールサーバーの場合は、指定する
            Dim mail As New System.Net.Mail.SmtpClient("③")
            mail.Credentials = New System.Net.NetworkCredential("④", "⑤")
            ' メールを送信する
            mail.Send(msg)
        End Sub
    </script>
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <title>無題のページ</title>
    </head>
    <body>
        <form id="form1" runat="server">
        <div>
            名前<asp:TextBox ID="name" runat="server"></asp:TextBox>
            <br />
            E-mail<asp:TextBox ID="Email" runat="server"></asp:TextBox>
            <br />
            <asp:TextBox ID="Message" runat="server" Columns="40" Rows="10"
                TextMode="MultiLine"></asp:TextBox>
            <asp:Button ID="Button1" runat="server" onclick="Button1_Click" Text="Button" />
        </div>
        </form>
    </body>
    </html>

    2009年2月3日 14:53

回答

  •  

    追加です。

    プロトコルアナライザを使用するのが難しいようでしたら、スローされ
    た例外の StatusCode を調べることでもある程度は原因が分かると思い
    ます。

    SmtpStatusCode 列挙体
    http://msdn.microsoft.com/ja-jp/library/system.net.mail.smtpstatuscode(VS.80).aspx

    サンプルを参考に、例外をキャッチするコードを実装して調べてみては
    いかがですか?

    ただ、SMTP 認証における SmtpClient と SMTP サーバの相性の問題があ
    るとすると、プロトコルアナライザがないとお手上げだと思います。先
    のレスに書いた Wireshark については以下のサイトが参考になると思
    います。入手先の uri もそこに記載されています。

    ネットワークエンジニアを目指して。
    パケットキャプチャツール「Wireshark」 - Wiresharkって?
    http://www.itbook.info/study/wireshark1.html

    その他、原因としては下記も考えられますが、質問の情報だけでは問題
    があるかどうか分かりません。

    (1) コードの間違い
    (2) ①~⑤の設定の間違い
    (3) OP25B
    (4) アクセス禁止(例:社内 LAN → 社外メールサーバ)
    (5) セキュリティ関係のソフトによるブロック

    ご自分が普段使っているプロバイダの SMTP サーバ経由で自分自身にメール
    を送信すれば (2) から (4) の問題はないはずですので試してみてくださ
    い。①~⑤の設定は、Outlook Express のアカウントのプロパティを参照
    すればすべて正しくできるはずです。

    • 回答としてマーク komi1 2009年2月4日 14:35
    2009年2月4日 13:04

すべての返信

  • SMTP 認証などがうまくいっているか、プロトコルアナライザを使って SMTP サーバ
    とのやり取りを見ないと分からないのではないかと思います。

    Wireshark など無償のプロトコルアナライザを入手して、どのようなやり取りがされ
    ているか、見てみてはいかがですか?
    2009年2月3日 16:24
  • 現行のOutlook ExpressではSMTP認証を使ってメールの送受信は出来ているんですよね?
    (Pop Before SMTPとかではなく、SMTP AUTHtで)

    考えられる要因として、SMTP認証のためにメールサーバーのポート番号が変更されているということはないでしょうか?
    Outlook Expressの設定でSMTPサーバーのポート番号を確認して25番以外なら、使用しているポート番号をコードに追加してみてはどうでしょうか。

    Dim mail As New System.Net.Mail.SmtpClient("③")

    Dim mail As New System.Net.Mail.SmtpClient("③", ポート番号)

    後、もしかしたら以下の行を追加する必要があるかもしれません。
    mail.UseDefaultCredentials = True
    2009年2月3日 18:40
  • Webサーバーとメールサーバーの位置関係はどうなっていますか? OP25Bによってブロックされているのかもしれません。


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://blogs.wankuma.com/trapemiya/
    2009年2月4日 0:09
    モデレータ
  • Visual Web Developerを動かしているマシンから、OutlookExpressなどのメールソフトを使って同じ設定で同じ宛先にメール送信できますでしょうか?



    http://blogs.wankuma.com/hatsune/
    2009年2月4日 1:08
  •  

    追加です。

    プロトコルアナライザを使用するのが難しいようでしたら、スローされ
    た例外の StatusCode を調べることでもある程度は原因が分かると思い
    ます。

    SmtpStatusCode 列挙体
    http://msdn.microsoft.com/ja-jp/library/system.net.mail.smtpstatuscode(VS.80).aspx

    サンプルを参考に、例外をキャッチするコードを実装して調べてみては
    いかがですか?

    ただ、SMTP 認証における SmtpClient と SMTP サーバの相性の問題があ
    るとすると、プロトコルアナライザがないとお手上げだと思います。先
    のレスに書いた Wireshark については以下のサイトが参考になると思
    います。入手先の uri もそこに記載されています。

    ネットワークエンジニアを目指して。
    パケットキャプチャツール「Wireshark」 - Wiresharkって?
    http://www.itbook.info/study/wireshark1.html

    その他、原因としては下記も考えられますが、質問の情報だけでは問題
    があるかどうか分かりません。

    (1) コードの間違い
    (2) ①~⑤の設定の間違い
    (3) OP25B
    (4) アクセス禁止(例:社内 LAN → 社外メールサーバ)
    (5) セキュリティ関係のソフトによるブロック

    ご自分が普段使っているプロバイダの SMTP サーバ経由で自分自身にメール
    を送信すれば (2) から (4) の問題はないはずですので試してみてくださ
    い。①~⑤の設定は、Outlook Express のアカウントのプロパティを参照
    すればすべて正しくできるはずです。

    • 回答としてマーク komi1 2009年2月4日 14:35
    2009年2月4日 13:04
  • ありがとうございます。
    (1)(2)は確認して間違えはなく
    (3) OP25B(はじめて知りました)を調べてみたところ

    http://www.odn.ne.jp/support/op25b/submission.html

    のHPをみて設定してみたらうまくいきました。

    教えていただけなければ、出来ませんでした。
    メールが使えるようになりました。
    いつも助けていただいてありがとうございます。

    2009年2月4日 14:35
  • メールの設定で、送信はできるようになったのですが
    メールのタイトルが文字化けをおこしてしまいます。

     Dim byteSubject As Byte() = System.Text.Encoding.GetEncoding("iso-2022-jp").GetBytes("問い合わせメール")
    この("問い合わせメール")だと、ちゃんと送付できるのですが、漢字によっては、また、

    Dim tai as String ="連絡します。" &  texBox.Text
     Dim byteSubject As Byte() = System.Text.Encoding.GetEncoding("iso-2022-jp").GetBytes(tai)

    で指定すると文字の漢字の部分(連絡)とtexBox.Textが文字化けしてしまいます。

    本文
    Dim byteBody As Byte() = System.Text.Encoding.GetEncoding("iso-2022-jp").GetBytes(message)
    方は、文字化けもせずきちんと表示されているのですが
    タイトルだけが文字化けしてしまうのはなぜでしょうか??
    2009年2月18日 13:45
  • komi1 の発言:

    メールの設定で、送信はできるようになったのですが
    メールのタイトルが文字化けをおこしてしまいます。

     Dim byteSubject As Byte() = System.Text.Encoding.GetEncoding("iso-2022-jp").GetBytes("問い合わせメール")
    この("問い合わせメール")だと、ちゃんと送付できるのですが、漢字によっては、また、

    Dim tai as String ="連絡します。" &  texBox.Text
     Dim byteSubject As Byte() = System.Text.Encoding.GetEncoding("iso-2022-jp").GetBytes(tai)

    で指定すると文字の漢字の部分(連絡)とtexBox.Textが文字化けしてしまいます。

    本文
    Dim byteBody As Byte() = System.Text.Encoding.GetEncoding("iso-2022-jp").GetBytes(message)
    方は、文字化けもせずきちんと表示されているのですが
    タイトルだけが文字化けしてしまうのはなぜでしょうか??


    文字化けするメールと文字化けしないメールのヘッダー部はどうなっていますか?
    あと、このスレッドは回答マークが付いているので、新しくスレッドを作った方がいいと思います。
    2009年2月18日 22:22