2017-11-17 16 views
1

참고 : Outlook 버전이 32 비트가 아닌 64 비트임을 알게 된 후 원본에서 편집되었습니다.자동화를 사용하여 32 비트 Outlook에서 전자 메일을 보낼 때 주소 오류가 발생했습니다.

전자 메일을 보내기 위해 Outlook 2010 32 비트 (정식 버전이 아닌)를 사용하는 레거시 32 비트 VB6 프로그램이 있습니다. Windows 7 (64 비트 가정)이있는 하나의 컴퓨터를 제외하고 많은 컴퓨터에서 완벽하게 작동합니다. 모든 Windows 7 시스템이 작동하지 않거나이 장치 만 작동하는지 여부는 확실하지 않습니다.

자동화 기술이나 MAPI 기술을 사용하면 Outlook Express에서 전자 메일을 보내지 만 메일 서버는받는 사람이 존재하지 않는다는 배달 할 수없는 메시지로 다시 보냅니다.

이제 자동화 기술을 사용하면 Outlook에서 UI가 표시되지 않고 이메일이 백그라운드에서 전송됩니다.

그러나 MAPI 기술을 사용하면 Outlook이 열리 며 이메일 작성 대화 상자가 나타나 사용자가 이메일을 보내기 전에 편집 할 수 있습니다. 흥미로운 점은 수신자 이메일이 정상적으로 보이지만 전송 된 경우 배달 실패로 실패한다는 것입니다. 그러나 수신자가 삭제되고 다시 입력되면 전자 메일은 성공합니다. 복사 및 다시 붙여 넣기도 가능합니다.

이렇게하면받는 사람 전자 메일 주소에 숨겨진 불법 문자가 하나 이상 있어야합니다 (아마도 null일까요?). 아래에 표시된 코드는 매우 간단하며 어떤 명백한 문제도 생각할 수 없습니다. 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

는 해결!

.RecipAddress = "SMTP:" & txtTo 

는 그냥 나에게 온 :

나는이 주제는 20 세기 사람이 프로그래밍없이 관심의 가능성이 높습니다 그러나 여기에서 수정을 실감. :)

+0

반대로 유용하다고 생각되는 사람들이 충분히 있습니다! – DaveInCaz