注:Outlookバージョンが32ビットではなく64ビットであることが判明した後、オリジナルから編集します。自動化を使用して32bit Outlookで電子メールを送信するとアドレスエラーが発生する
私は電子メールを送信するためにOutlook 2010の32ビット(フルバージョン、フルバージョンではない)を使用する従来の32ビットVB6プログラムを持っています。 Windows 7(64ビットと仮定)を備えた1台のマシン以外の多くのマシンで完璧に動作します。すべてのWindows 7マシンが動作しない場合、またはこのマシンだけが動作しないかどうかは不明です。
outlookは電子メールを送信しますが、メールサーバーは受信者が存在しないというメッセージを送信できないと返します。
自動化手法を使用すると、OutlookではUIは表示されず、電子メールはバックグラウンドで送信されます。
MAPI技術を使用するとOutlookが開きます。メールの作成ダイアログが表示され、送信前にメールを編集できます。興味深いのは、受信者の電子メールが正常に見えるが、送信された場合は配信不能として失敗するということです。しかし、受信者が削除され、再入力された場合、電子メールは成功します。私はコピーと再ペーストも動作すると信じています。
これは、受信者の電子メールアドレスに1つ以上の非表示の不正な文字が含まれている必要があることを示しています(おそらくヌルでしょうか?)。以下に示すこれを行うためのコードは非常に明白であり、明らかな修正について考えることはできません。 txtToは電子メールアドレスを持つvb6文字列であり、これはすべての問題を引き起こしているフィールドです。
エラーメッセージ:
Your message did not reach some or all of the intended recipients.
Subject: a test from daryls cpu #2
Sent: 11/17/2017 8:01 PM
The following recipient(s) cannot be reached:
'[email protected]' on 11/17/2017 8:01 PM
None of your e-mail accounts could send to this recipient.
オートメーション技術
Dim mOutlookApp As Object
Set mOutlookApp = GetObject("", "Outlook.application")
Dim olNs As Object
Set olNs = mOutlookApp.GetNamespace("MAPI")
olNs.Logon
Dim OutMail As Object
Set OutMail = mOutlookApp.CreateItem(0)
'Set the To and Subject lines. Send the message.
With OutMail
.To = txtTo
.CC = txtCC
.Subject = txtSubjext
.HTMLBody = txtBody & vbCrLf
Dim myAttachments As Object
Set myAttachments = .Attachments
vAttach = Split(mAttachments, ",")
For i = 0 To UBound(vAttach)
myAttachments.add vAttach(i)
Next i
Dim myFolder As Object
Set myFolder = olNs.GetDefaultFolder(5) 'olFolderSent
Set .SaveSentMessageFolder = myFolder
StatusBar1.Panels(1).Text = "Status: Sending"
.send
End With
MAPIテクニック
'Open up a MAPI session:
With frmMain.MAPISession1
.DownLoadMail = False
.Username = ""
.LogonUI = True
.SignOn
End With
With frmMain.MAPIMessages1
.SessionID = frmMain.MAPISession1.SessionID
.Compose
.MsgIndex = -1
.RecipIndex = 0
.RecipAddress = txtTo
.RecipDisplayName = txtTo
.RecipType = mapToList
If txtCC <> "" Then
.RecipIndex = 1
.RecipDisplayName = txtCC
.RecipAddress = txtCC
.RecipType = mapCcList
End If
'spaces are important! need one space for each attachment
'NOTE .MsgNoteText = " " MUST be there see.. KB173853 in microsoft
.MsgSubject = txtSubjext
.MsgNoteText = Space$(UBound(vAttach) + 1) & vbCrLf
.MsgNoteText = txtBody & vbCrLf
For i = 0 To UBound(vAttach)
.AttachmentIndex = i
.AttachmentPosition = i
.AttachmentType = mapData
.AttachmentName = GetFileFromPath(vAttach(i))
.AttachmentPathName = vAttach(i)
Next i
StatusBar1.Panels(1).Text = "Status: Sending"
.send True
End With
詳細:
私はいくつかの進歩を作ってるんです。エラーはSMTPではないOutlookの電子メールタイプと関係があります。 Outlookの作成ダイアログの送信先電子メールで、電子メールアドレスを右クリックし、Outlookのプロパティを選択し、電子メールの種類をSMTPに変更すると動作します。表示されるタイプは電子メールアドレスそのものです。有効な値は「mailto」と「smtp」のようです。だからもし私がvb6からエラーを修正する必要があります電子メールの種類を設定することができます。
「回答」? https://kb.intermedia.net/article/2344
私は
将来的にこれに遭遇する人々を助けるかもしれない実際の質問が要約できれば – DaveInCaz