トップ回答者
メールの設定について

質問
-
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>
回答
-
追加です。
プロトコルアナライザを使用するのが難しいようでしたら、スローされ
た例外の 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
すべての返信
-
現行の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 -
追加です。
プロトコルアナライザを使用するのが難しいようでしたら、スローされ
た例外の 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
-
ありがとうございます。
(1)(2)は確認して間違えはなく
(3) OP25B(はじめて知りました)を調べてみたところ
http://www.odn.ne.jp/support/op25b/submission.html
のHPをみて設定してみたらうまくいきました。
教えていただけなければ、出来ませんでした。
メールが使えるようになりました。
いつも助けていただいてありがとうございます。 -
メールの設定で、送信はできるようになったのですが
メールのタイトルが文字化けをおこしてしまいます。
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)
方は、文字化けもせずきちんと表示されているのですが
タイトルだけが文字化けしてしまうのはなぜでしょうか?? -
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)
方は、文字化けもせずきちんと表示されているのですが
タイトルだけが文字化けしてしまうのはなぜでしょうか??
文字化けするメールと文字化けしないメールのヘッダー部はどうなっていますか?
あと、このスレッドは回答マークが付いているので、新しくスレッドを作った方がいいと思います。