2017-11-17 11 views
1

注: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

私は

+0

将来的にこれに遭遇する人々を助けるかもしれない実際の質問が要約できれば – DaveInCaz

答えて

0

が解決...このための修正が存在しないと信じてすることはできません!

私はこのトピックは、20世紀には誰もプログラミングに興味のない最も可能性が高いですが、ここで修正され実現:

.RecipAddress = "SMTP:" & txtTo 

それはちょうど私のところに来ました。 :)

+0

これとは反対に、これは役に立つかもしれない人が十分にいる! – DaveInCaz

関連する問題