VBでメールを送る時のSMTP認証対応が分かりません

このQ&Aのポイント
  • 近頃、メールサーバーの仕様が変わり、VBで処理をした最後にメールを送る際にSMTP認証が必要という知らせがありました。しかし、認証の方法を試してもうまく送れません。
  • VBのコードでは、SendMail関数を使用してメールを送信しています。しかし、IDとパスワードを適切に設定しても、送信エラーが発生し、パスワードが違うと返ってきます。
  • 現在の書き方が正しくないのか、サーバーの仕様に合っていないのか、原因は分かりません。メーラー(アウトルックエキスプレス)では正しく認証ができるため、サーバーの問題ではないと考えられます。助言をいただけると助かります。
回答を見る
  • ベストアンサー

VBでメールを送る時のSMTP認証対応が分かりません

VBで処理をした最後にメールを送る処理を BSMTP.DLLを使ってやっていました 近頃 メールサーバーの仕様が変わり SMTP認証が 必要という知らせがありました そうすると 突然メールが送れなくなり (実はメールが送れなくなってメールサーバーの仕様が変わったことが分かった) あわてて色々調べたら 認証の仕方が書いて有ったので 色々試したのですが うまく送れません コードは以下のようにしています 宣言部分 Private Declare Function SendMail Lib "bsmtp" _ (szServer As String, szTo As String, szFrom As String, _ szSubject As String, szBody As String, szFile As String) As String コード Dim ret As String Dim szServer As String, szTo As String, szFrom As String Dim szSubject As String, szBody As String, szFile As String Screen.MousePointer = vbHourglass szServer = "abc.com" 'SMTPサーバー(ポート番号はしていません なので25) szTo = b@efg.com '宛先 一件のみ ★問題はこの下の行かと思います szFrom = "a:password" & vbTab & "LOGIN" szSubject = ' 件名 以下本文等・・・・・ szFile = "" '添付ファイル無し ret = SendMail(szServer, szTo, szFrom, szSubject, szBody, szFile) If Len(ret) <> 0 Then Screen.MousePointer = vbDefault MsgBox "処理エラーが発生しました。" & "送信不能" & ret Exit Sub Else Screen.MousePointer = vbDefault MsgBox "メール送信終了しました。", vbInformation, "送信完了" End If ★の所でID パスワードはきちんと合ってます でもこれで実行すると パスワードが違うと返ってきます また 認証方式も3つとも試しましたが 同じ結果です bsmtpも最新の物に変えてみました、でもダメでした そもそも書き方がいけないのかサーバーの仕様にあっていないのかも 分かりません szFrom = "a:password" & vbTab & "LOGIN" では a@abc.com から届いたよと言う事が相手に分からないし 書いてみようと思い szFrom = "a@abc.com" & vbTab & "a:password" & vbTab & "LOGIN" szFrom = "a@abc.com:password" & vbTab & "LOGIN" など書いてみましたが ダメでした(認証方式も変えてみた) ちなみに メーラー(アウトルックエキスプレス)では ID a とパスワードで、きちんと認証して送信できるので サーバー自体は問題ないだろうから 記述がおかしいのだろうと思っています どなたかこのあたりを分かりやすく教えていただければ 助かります。 日常業務で使っていたので 大変困ってます よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • NYOI
  • ベストアンサー率58% (56/96)
回答No.1

szFrom = "a@abc.com" & vbTab & "a:password" も試してみてください。 ( & vbTab & "LOGIN" を省略した形) AUTH LOGINだとこれでOKかもしれません。

umauma117
質問者

お礼

できました できました お涙物です まさに神の声 ありがとうございました 今日から枕高く寝れます 本当にありがとうでした!!!!!!

関連するQ&A

  • VB6で、Bsmtp.dllを使って、メール送信した際、Time Ou

    VB6で、Bsmtp.dllを使って、メール送信した際、Time Outエラーが発生。 So-netのメールサーバーmail.so-net.ne.jpへメール送信していたのですが、最近Time Outエラーで送れなくなってしまいました。 標準モジュールで Public Declare Function SendMail Lib "bsmtp" (szServer As String, szTo As String, szFrom As String, szSubject As String, szBody As String, szFile As String) As String と定義し、 strRet = SendMail(szServer, szTo, szFrom, szSubject, szBody, szFile) で送信しています。 So-netのメールサーバーmail.so-net.ne.jpへ送信する場合、ポート番号587を使用するようですが、それが原因なのでしょうか? Bsmtp.dllのバージョンは、2.7.6.29です。 よろしくお願いします。

  • BASP21を使ってファイル添付メールを送信したい

    basp21 pro(http://www.b21soft.co.jp/basp21/)でメールにファイル添付したいのですが エクセルファイルを添付したいのですが、SendMailで型が一致しませんというエラーが出ます。 教えてください><; ファイル名に指定しているセルCells(i, 28) は =AC3&"\"&AD3 の様に場所を指定しています (AD3 部分が変わっていくので。ここを変えた方がいいでしょうか?) 内容は一部省略しておりますが ↓です Sub SendMailMacro1() Dim szServer, szTo, szFrom, szSubj, szBody, ret, szLogfile, z As String Dim szFile As Variant Dim i, j As Long Dim fs, a As Object On Error GoTo Err_Handler Set fs = CreateObject("Scripting.FileSystemObject") Set a = fs.CreateTextFile("C:\Program Files\log.txt", True) szServer = Worksheets("maildata").Cells(10, 2) szFrom = Worksheets("maildata").Cells(8, 2) With Worksheets("senddata") i = 2 Do While .Cells(i, 1) <> "END" If .Cells(i, 1) = "1" Then If .Cells(i, 3) = "1" Then szTo = .Cells(i, 5) & vbTab & "bcc" & vbTab & .Cells(1, 36) End If szBody = .Cells(i, 26) szSubj = .Cells(i, 25) szFile = .Cells(i, 28) ret = SendMail(szServer, szTo, szFrom, szSubj, szBody, szFile) If Len(ret) <> 0 Then a.WriteLine (Date & " " & Time & " " & ret & "-" & szTo & "-" & szBody) MsgBox "エラー ・・・ " & i & "行目 ( " & ret & ")" .Cells(i, 1) = "エラー" Else .Cells(i, 1) = "完了" End If End If i = i + 1 Loop End With MsgBox "終了" GoTo Exit_sub Err_Handler: MsgBox Err.Description, vbCritical, "Error" GoTo Exit_sub Exit_sub: a.Close End Sub 宜しくお願い致します<(_ _)>

  • SendMailがエラーを返さない

    VBでBSMTP.DLLのSendMailを使ってメール送信するプログラムを使っています。 相手先アドレス不正などの場合は、SendMailの戻り値でエラーを識別できるのですが、正常終了しているにも関わらずそのメールが相手先に到着しないという現象が出ています。 原因として、どういうことが考えられるでしょうか? 心当たりのある方がいらっしゃいましたら、ご指導をお願いいたします。 ret = SendMail(SMTP_SVNm, szTo, szFrom, szSubject, szBody, szFile) If Len(ret) <> 0 Then MsgStr = "送信エラー" Else MsgStr = "送信完了" End If

  • Basp21を使用してメール送信ができない

    Basp21を使用して、メール送信プログラム(Excel VBA)を作成しました。 5台のパソコン(同一仕様)の内1台のパソコンのみエラーが発生してメール送信ができません。 他の4台のPCと環境の相違は無いと思いますが、原因が解りません。 パソコンの初期化をすれば、正常に動作すると思いますが、 エラー発生の都度、初期化もできません。 どなたか、ご教示をよろしくお願いします。 PC環境  OS  :Win7 Pro 64Bit環境  Excel:2013 32Bit  セキュリティソフト:無効 コンポーネントの組み込み  Bsmtp.dll(587 Version) を C:\Windows\SysWOW64 のフォルダーにコピー エラーメッセージ(1秒程度でリターン)  HELO BSMTP.DLL helo BSMTP.DLL 確認項目  1)通常のメール送受信は問題無し(Outlook)  2)Bsmtpのセキュリティは、正常な他のPCと同じ  3)Administratorsで実行してもエラー発生(ユーザー権限の問題)  4)エラー発生時に、Bsmtp.dllの削除操作    Excelによって開かれているため削除不可のメッセージ(dllの読込み確認)  5)架空のサーバーを指定:Cant connect Server 11001のメッセージ  6)LANケーブルを抜く  :Cant connect Server 11004  7)Excelの再インストール(レジストリも削除)しても同じ(Excelのチェック)  8)Bsmtp.dllをコピーしなおしても同じ(Bsmtpのチェック) プログラム  Private Declare Function SendMail Lib "BSMTP.dll" _ (szServer As String, szTo As String, szFrom As String, _ szSubject As String, szBody As String, szFile As String) As String strSMTP="aaa.co.jp" strPort="25" strTimeOut="60" strToAddr="a123@aaa.co.jp" strFromAddr="b123@aaa.co.jp" strSubj="メールテスト"   strBody="本文" strAttach="" strSV_Name = strSMTP & ":" & strPort & ":" & strTimeOut strMailto = strToAddr strMailFrom = strFromAddr strRC = SendMail(strSV_Name, strMailto, strMailFrom, strSubj, _ strBody, strAttach) If strRC <> "" Then MsgBox "エラー発生" & strRC End If 以上 よろしくお願いします

  • SMTP認証時のなりすまし対策?

    メールアドレスがSMTP認証時のユーザ名となっていて、 メールを送信する際、そのメールの送信元アドレスが SMTP認証時のユーザ名と同一でなければメールの送信が 行えないISPがあるようです。 いわゆるなりすましメール対策には有効な機能だと 思うのですが、この機能をpostfixやsendmailと言った Linuxベースのメールサーバで実現する事は可能なのでしょうか? 可能な場合、具体的にはどのようなソフトウェアを 用いて実現するのでしょうか?

  • SMTP認証非対応ネットワーク機器からのメール送信

    現在、Gyaoをプロバイダとしてネットに接続しています。 GyaoではSMTPサーバは認証になっており、自プロバイダの中からでも アカウントとパスワードを設定しておく必要があります。 当家には、ルータ(バッファローWHR-HP-G54)、 ネットワークHDD(バッファローHS-DH320GL)、 HDDレコーダー(東芝ヴァルディアS601)などの機器があり、 これらはメールでステータスなどを知らせる機能を持っています。 ですが、どれもメール送信の設定的にSMTP認証には対応しておらず、 こうしたメールを送信することができていません。 SMTP認証を回避する方法は何かありませんでしょうか。 あるいはプロバイダの外から利用可能な、認証不要なSMTPサーバは 無いものでしょうか。 ちなみに、上記3機種とも、GyaoでSMTP認証が始まる前までは ステータスメールの送信は問題なくおこなえていました。

  • メール送信時の認証について

    サーバー変更に伴い、メール送信時の認証が必要となりました。 ところが、これまで使っていたAL-mailのツール-オプション-アカウント-高度な設定-メール送信時に認証するを設定すると、SMTP Authentication(CRAM-M05)に対応していませんというエラーがでてしまいます。 Outlook expressでツール-アカウント-メール-プロパティ-サーバ-で送信メールサーバ欄でこのサーバーは認証が必要にチェックを入れると問題なく送信できます。 これはAL-mailとOutlook expressでは認証の方法が違うのでしょうか? これまでAL-mailを使っていたので他のメーラーに移行したくないのですが、なにかよい対策があれば教えてください。

  • 認証未対応機器からのSMTPサーバ利用

    SMTP認証、POPbeforeSMTP未対応の、 機器からメールをおくりたいと思っています。 しかし、現在、多くのプロバイダ・メールサービスの SMTPサーバがSMTP認証、POPbeforeSMTPに対応していますので、 おくる事ができないのではないかと思っています。 そこで、そんな機器からでも送れるメールサービスや、 メールサーバを探しています。 他にも、メールを送る方法があれば教えてください。 ちなみに、その機器からは、 送信元アドレス、送信先アドレス以外を指定してメールを 送る事はできません。

  • SMTP認証を特定のメールアドレスだけ解除できますか?

    某ソフトでメール通知する機能があるのですが、SMTP認証のメールサーバーに対応していません。 設定できるのはSMTPサーバのアドレスと、送信用メールアドレスだけです。 メールサーバー側の設定で、特定のメールアドレスだけSMTP認証無しにするような設定はできるのでしょうか?

  • VB.NETでフリーメールアドレスにメール送信できない

    VisualStudio2005で開発をしています。 SmtpClientクラスを使ってメールを自動送信するアプリを作成中なのですが、 社内サーバー同士でのメール送信は問題ないのですが、社外のメールサーバーのアドレスを指定した場合に、メールが送信されなくて困っています。 ○例:)yyyyyy@xxxxxx.co.jp → zzzzzz@xxxxxx.co.jp ×例:)yyyyyy@xxxxxx.co.jp → zzzzzz@zzzzz.com 調べてはみたのですが、原因を特定することができなかったので質問させていただきました。 1.googleやyahooなどのメールサーバーに対してでもメール送信できるようにしたいのですが、どの様にすればいいでしょうか? 2.上記のように書きましたが、本当はメールサーバまでは送信されていて、クライアントが受け取れていないという可能性もあるのでしょうか? 皆様のお力を借りたく思います。 どうかよろしくお願いいたします。 ↓↓↓以下、現在作成中のソースコード↓↓↓ Private Sub btn_Send_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_Send.Click '送信者 Dim senderMail As String = "xxxxx@yyyyy.co.jp" ''宛先 Dim recipientMail As String = "xxxxx@yyyyy.com" '件名 Dim subject As String = "タイトル" '本文 Dim body As String = "本文1行目" + vbCrLf + vbCrLf + "本文3行目" Dim sc As New System.Net.Mail.SmtpClient() ' メールメッセージインスタンスの生成 Dim objMessage As New System.Net.Mail.MailMessage(senderMail, recipientMail, subject, body) 'SMTPサーバーを指定する sc.Host = "mail.yyyyy.co.jp" sc.Port = 25 'メールを送信する sc.Send(objMessage) End Sub

専門家に質問してみよう