CDOを使用したメール送信(VB6)

タグの編集
投稿者 cobobo  (社会人) 投稿日時 2018/7/6 15:09:41
VB6からメール送信を行いたいのですが認証で弾かれているようで下記のエラーが出ます。
どこを調べれば良いのでしょうか?

エラー: -2147220977
?T?[?o?[?E?a?A?A 1 ?A?U???I?!?”?I?o?M?O?A?h???X?a?‘”U?3?e?U?μ???B?T?[?o?[?c?c?I‰?“??I???I?A?¨?e?A?・?B553 5.7.1 <アドレス>: Sender address rejected: not logged in

コードに書いた認証情報やポート番号などをコピペでOutlookのアカウント情報に入力した場合
何の問題もなく使えるので、情報自体は正しいです。
コードは以下の通りです。

    Dim objEmail    As New CDO.Message
    Dim strTextBody As String
    strTextBody = "テスト"
    
    With objEmail
        .To = 宛先
        .From = 送信元
        .Subject = "テストメール"
        .TextBody = strTextBody                    

        .AddAttachment (ファイルパス)


        'SMTP設定 
        With .Configuration.Fields
            'サーバー、ポート設定 
            .Item(cdoSendUsingMethod) = cdoSendUsingPort
            .Item(cdoSMTPServer) = SMTPサーバIPアドレス
            .Item(cdoSMTPServerPort) = 587         ' ポート№ 
            
            '認証情報 
            .Item(cdoSMTPAuthenticate) = cdoAnonymous 'cdoBasic 'cdoNTLM どれを使えば? 
            .Item(cdoSendUserName) =ユーザー名
            .Item(cdoSendPassword) =パスワード
            
            .Item(cdoSMTPConnectionTimeout) = 60 
            .Item(cdoSMTPAuthenticate) = 0
            .Update
        End With
     
       .Send
    End With
投稿者 eigyou  (社会人) 投稿日時 2018/7/8 16:44:42
cobobo様

あんまり詳しくないので、回答ではないですが

CDO.Message は SMTP over SSL (ポート465) の SMTP 認証方式を使います。TLS/STARTTLS (ポート587) の SMTP 認証方式には対応していないため、この場合は以下のエラーになります。
エラーメッセージ: -2147220973 転送においてサーバーに接続できませんでした。

だそうです

メールサーバ側が対応しているなら ポート465SMTP over SSL 試してみては如何でしょうか?
投稿者 魔界の仮面弁士  (社会人) 投稿日時 2018/7/8 23:18:31
ひとまず、エラー: -2147220977 (0x8004020F) の文字化けしたメッセージの中に、
SMTP 応答コード「553 5.7.1」のエラーメッセージが表示されていますね。

553 5.7.1 <送信先のメールアドレス>: Sender address rejected: not logged in

どのように設定すれば良いのかは、お使いのメールサーバーによって異なるので
一概には言えませんが、メールサーバー管理者の方で、「正しい Outlook 設定方法」を
公開していたりはしないでしょうか。たとえばこういったページです。

https://help.gmocloud.com/app/answers/detail/a_id/2330/~/%E3%80%8C553-5.7.1%E3%80%8D%E3%81%AE%E3%82%A8%E3%83%A9%E3%83%BC%E3%83%A1%E3%83%83%E3%82%BB%E3%83%BC%E3%82%B8%E3%81%8C%E8%A1%A8%E7%A4%BA%E3%81%95%E3%82%8C%E3%81%A6%E3%80%81%E3%83%A1%E3%83%BC%E3%83%AB%E3%81%AE%E9%80%81%E4%BF%A1%E3%81%8C%E3%81%A7%E3%81%8D%E3%81%BE%E3%81%9B%E3%82%93%E3%80%82


> .Item(cdoSMTPAuthenticate) = cdoAnonymous 'cdoBasic 'cdoNTLM どれを使えば? 
cdoBasic かな…。
もし SSL を使用する場合は、cdoSMTPUseSsl を True にしてみてください。

> .Item(cdoSMTPAuthenticate) = 0
なぜ最後にマジックナンバーで再設定しているのでしょうか?

cdoAnonymous:0:認証無し。
cdoBasic:1:平文による基本認証。cdoSendUserName / cdoSendPassword を指定。
cdoNTLM:2:NTLMによるチャレンジ/レスポンス認証。cdoSendUserName / cdoSendPassword を指定。
投稿者 cobobo  (社会人) 投稿日時 2018/7/9 11:13:55
ありがとうございます。
.Item(cdoSMTPAuthenticate) = 0が最後についていたのはコード整理をした時に残ってしまったゴミですね。
cdoSMTPUseSsl をTrueにしたところ出てくるエラーが下記の通りになりました。

エラー: -2147220973
“]‘??E?¨?¢?A?T?[?o?[?E?U‘±?A?≪?U?1?n?A?μ???B

文字化けしてますが番号から見てサーバーの認証方式関係の問題に絞れました。