トップ回答者
vb2017からメール送信

質問
-
下記サイトを参考にメール送信を行うとしていますが上手く行きません。
https://dobon.net/vb/dotnet/internet/smtpclient.html
サイト内に
「注意:ここで紹介しているコードを実際に使用する場合は、必ずSMTPサーバー、送信者、宛先などの設定を適切に変更してください。」
という但し書きがありますが、むしろそれが難しいです。
とりあえず、ボタンに下記のコードを埋め込んでみました。
<コード>
'送信者
Dim senderMail As String = "sender@xxx.xxx"
'宛先
Dim recipientMail As String = "recipient@xxx.xxx"
'件名
Dim subject As String = "こんにちは"
'本文
Dim body As String = "こんにちは。" + vbCrLf + vbCrLf + "それではまた。"
'SmtpClientオブジェクトを作成する
Dim sc As New System.Net.Mail.SmtpClient()
'SMTPサーバーを指定する
sc.Host = "mail.xxx.xxx"
'ポート番号を指定する(既定値は25)
sc.Port = 587
'メールを送信する
sc.Send(senderMail, recipientMail, subject, body)
'後始末(.NET Framework 4.0以降)
sc.Dispose()
<設定の前提>
ドメイン:
xxx.xxx
伏せていますが、実在する独自ドメイン
送信元アドレス:
sender@xxx.xxx
さくらレンタルサーバーのWEBメールで作成したアドレス
SMTPサーバー:
mail.xxx.xxx
さくらレンタルサーバーのSMTPサーバー
Port:
587
上記の設定は、PCのメーラ(サンダーバード)で送受信可能であることを確認済。付け加えるなら、それ以外にメーラでは
認証方式:暗号化されたパスワード認証
接続の保護:STARTTLS
を設定しています。
<実行結果>
SMTP サーバーにセキュリティで保護された接続が必要であるか、またはクライアントが認証されていません。
サーバーの応答:5.7.0 Authentication required
<考察>
このエラーの時は
EnableSsl = True
を設定しろという内容が検索で出てきた。
sc.Send(senderMail, recipientMail, subject, body)
の前に
sc.EnableSsl = True
を入れて再度実行。
<実行結果>
検証プロシージャによると、リモート証明書は無効です。
検索しても、良く理解できない情報しか出てきませんでした。
何をすればメールを送信する事ができるか、具体的に教えて頂けると幸いです。
なお、基礎や概念のURLの貼り付けは望んでいません。
具体的に教えて頂ける方がいらっしゃいましたらよろしくお願いします。
回答
-
認証に関する記述がないようですが、どのような認証で接続されようとしていますか?
SMTP認証であれば、ユーザー名とパスワードが必要になります。サブミッションポートを指定されているので、なおさらです。
例えば、以下のページでは、ユーザー名とパスワードを指定しています。SMTP認証でメールを送信する
https://dobon.net/vb/dotnet/internet/smtpauth.html★良い回答には回答済みマークを付けよう! MVP - .NET http://d.hatena.ne.jp/trapemiya/
- 回答としてマーク custardpudding 2017年12月18日 5:40
-
メールソフト(Outlookなど)では送信がうまくできているのでしょうか?
また、ご質問のコードでは Credentials プロパティが設定されていませんが、下記のサイトを参考に設定してみてはいかがでしょうか?
- 回答としてマーク custardpudding 2017年12月18日 5:40
-
.EnableSsl = True
SSL通信でなければ、この行は不要です。外してみて下さい。
★良い回答には回答済みマークを付けよう! MVP - .NET http://d.hatena.ne.jp/trapemiya/
- 回答としてマーク custardpudding 2017年12月18日 5:39
すべての返信
-
認証に関する記述がないようですが、どのような認証で接続されようとしていますか?
SMTP認証であれば、ユーザー名とパスワードが必要になります。サブミッションポートを指定されているので、なおさらです。
例えば、以下のページでは、ユーザー名とパスワードを指定しています。SMTP認証でメールを送信する
https://dobon.net/vb/dotnet/internet/smtpauth.html★良い回答には回答済みマークを付けよう! MVP - .NET http://d.hatena.ne.jp/trapemiya/
- 回答としてマーク custardpudding 2017年12月18日 5:40
-
メールソフト(Outlookなど)では送信がうまくできているのでしょうか?
また、ご質問のコードでは Credentials プロパティが設定されていませんが、下記のサイトを参考に設定してみてはいかがでしょうか?
- 回答としてマーク custardpudding 2017年12月18日 5:40
-
ありがとうございます。
'SmtpClientオブジェクトを作成する
Dim SmtpClient1 As New System.Net.Mail.SmtpClient()
With SmtpClient1
'SMTPサーバーを指定する
.Host = "mail.xxx.xxx"
'ポート番号を指定する(既定値は25)
.Port = 587
.EnableSsl = True
.DeliveryMethod = System.Net.Mail.SmtpDeliveryMethod.Network
.Credentials = New System.Net.NetworkCredential("sender@xxx.xxx", "passwd1")
'メールを送信する
.Send(senderMail, recipientMail, subject, body)
'後始末(.NET Framework 4.0以降)
.Dispose()
End With
こんな感じにして実行しました。
↓↓
検証プロシージャによると、リモート証明書は無効です。
- 編集済み custardpudding 2017年12月18日 3:17
-
> メールソフト(Outlookなど)では送信がうまくできているのでしょうか?
サンダーバード(メーラ)で使用しているメールアドレスを用いていますので送受信実績はあります。
【アカウントの設定】
アカウント
sender@xxx.xxx
サーバーの種類
IMAPメールサーバー
サーバー名
mail.xxx.xxx
ポート
143
ユーザー名
sender@xxx.xxx
接続の保護
STARTTLS
認証方式
通常のパスワード認証
【SMTPサーバーの設定】
サーバー名
mail.xxx.xxx
ポート
587
ユーザー名
sender@xxx.xxx
認証方式
暗号化されたパスワード認証
接続の保護
STARTTLS -
.EnableSsl = True
SSL通信でなければ、この行は不要です。外してみて下さい。
★良い回答には回答済みマークを付けよう! MVP - .NET http://d.hatena.ne.jp/trapemiya/
- 回答としてマーク custardpudding 2017年12月18日 5:39