참고 : 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
는 나는이에 대한 수정이없는 믿을 수 없어...
미래에이 문제에 부딪히는 사람들을 도울 수있는 실제 질문이 무엇인지 요약 할 수 있다면 – DaveInCaz