在基于Web的Outlook中将输入填充到“”抄送“”主题“”邮件“”
OWA的url是"https://outlook.office.com/mail/deeplink/compose?version=2020051702.05&popoutv2=1&leanbootstrap=1“
例如,"To“的"Input”的标签是<input autocapitalize="off" autocomplete="off" aria-autocomplete="both" aria-label="To" class="ms-BasePicker-input pickerInput_8d9d7e4e" aria-expanded="false" aria-haspopup="true" role="combobox" data-lpignore="true" value="" tabindex="0">
我应该如何写信给我的VBA为OWA value part分配一个电子邮件地址?
我的代码如下:
Dim objIE As Object, i As Long, html As Object
'Creare Internet Explorer
Set objIE = CreateObject("InternetExplorer.Application")
With objIE
.Visible = True 'true
.Silent = True
.Navigate "https://outlook.office.com/mail/deeplink/compose?version=2020051702.05&popoutv2=1&leanbootstrap=1"
While .Busy = True Or .ReadyState < 4: DoEvents: Wend
Set html = .Document
html.querySelector("input[aria-label='To']").value = "XXX@email.com"
End With
发布于 2020-05-27 19:25:24
您需要下面的CDO校验码来设置电子邮件和使用CDO的电子邮件。它不依赖于MAPI或CDO,因此是无对话框的,也不使用您的邮件程序发送电子邮件。
为什么在VBA中使用CDO代码而不是Outlook自动化或SendMail?
你可以在here上找到更多信息
Sub SendMessage(Subject As String, Recipient As String, Body As String, User As String, Password As String)
Dim sReq As String
Dim xmlMethod As String
Dim XMLreq As New MSXML2.XMLHTTP60
Dim EWSEndPoint As String
EWSEndPoint = "https://outlook.office365.com/EWS/Exchange.asmx"
sReq = "<?xml version=""1.0"" encoding=""UTF-8""?>" & vbCrLf
sReq = sReq & "<soap:Envelope xmlns:soap=""http://schemas.xmlsoap.org/soap/envelope/"" xmlns:t=""http://schemas.microsoft.com/exchange/services/2006/types"">" & vbCrLf
sReq = sReq & "<soap:Header>" & vbCrLf
sReq = sReq & "<t:RequestServerVersion Version=""Exchange2010""/>" & vbCrLf
sReq = sReq & "</soap:Header>" & vbCrLf
sReq = sReq & "<soap:Body>" & vbCrLf
sReq = sReq & "<CreateItem MessageDisposition=""SendAndSaveCopy"" xmlns=""http://schemas.microsoft.com/exchange/services/2006/messages"">" & vbCrLf
sReq = sReq & "<SavedItemFolderId>" & vbCrLf
sReq = sReq & "<t:DistinguishedFolderId Id=""sentitems"" />" & vbCrLf
sReq = sReq & "</SavedItemFolderId>" & vbCrLf
sReq = sReq & "<Items>" & vbCrLf
sReq = sReq & "<t:Message>" & vbCrLf
sReq = sReq & "<t:ItemClass>IPM.Note</t:ItemClass>" & vbCrLf
sReq = sReq & "<t:Subject>" & Subject & "</t:Subject>" & vbCrLf
sReq = sReq & "<t:Body BodyType=""Text"">" & Body & "</t:Body>" & vbCrLf
sReq = sReq & "<t:ToRecipients>" & vbCrLf
sReq = sReq & " <t:Mailbox>" & vbCrLf
sReq = sReq & " <t:EmailAddress>" & Recipient & "</t:EmailAddress>" & vbCrLf
sReq = sReq & " </t:Mailbox>" & vbCrLf
sReq = sReq & "</t:ToRecipients>" & vbCrLf
sReq = sReq & "</t:Message>" & vbCrLf
sReq = sReq & "</Items>" & vbCrLf
sReq = sReq & "</CreateItem>" & vbCrLf
sReq = sReq & "</soap:Body>" & vbCrLf
sReq = sReq & "</soap:Envelope>" & vbCrLf
xmlMethod = "POST"
XMLreq.Open xmlMethod, EWSEndPoint, False, User, Password
XMLreq.setRequestHeader "Content-Type", "text/xml; charset=""UTF-8"""
XMLreq.setRequestHeader "Translate", "F"
XMLreq.setRequestHeader "User-Agent", "Blah"
XMLreq.send sReq
If XMLreq.Status = 207 Then
End If
End Sub
发布于 2020-05-27 21:03:54
Helo,在我之前的回答中,我做了一个变通方法,哈哈,对不起,你可以使用以下代码来使用ie.document.getElementById("name").Value = objItem.SenderName
在web表单上填写输入
Sub HelpdeskNewTicket()
Dim helpdeskaddress As String
Dim objMail As Outlook.MailItem
Dim strbody As String
Dim oldmsg As String
Dim senderaddress As String
Dim addresstype As Integer
Dim ie As Object
Dim sResult As String
Dim dtTimer As Date
Dim lAddTime As Long
Set objItem = GetCurrentItem()
' Sender E=mail Address
senderaddress = objItem.SenderEmailAddress
'Searches for @ in the email address to determine if it is an exchange user
addresstype = InStr(senderaddress, "@")
' If the address is an Exchange DN use the Senders Name
If addresstype = 0 Then
senderaddress = objItem.SenderName
End If
Const sOVIDURL As String = "http://helpdesk.com/admin"
Const lREADYSTATE_COMPLETE As Long = 4
Set ie = CreateObject("InternetExplorer.Application")
ie.Visible = True
ie.navigate sOVIDURL
dtTimer = Now
lAddTime = TimeValue("00:00:20")
Do Until ie.readystate = lREADYSTATE_COMPLETE And Not ie.busy
DoEvents
If dtTimer + lAddTime > Now Then Exit Do
Loop
ie.document.getElementById("user").Value = "yourusername"
ie.document.getElementById("password").Value = "yourpassword"
ie.document.forms(0).submit
Do Until ie.readystate = lREADYSTATE_COMPLETE And Not ie.busy
DoEvents
If dtTimer + lAddTime > Now Then Exit Do
Loop
ie.navigate "http://helpdesk.com/admin/new_ticket.php"
Do Until ie.readystate = lREADYSTATE_COMPLETE And Not ie.busy
DoEvents
If dtTimer + lAddTime > Now Then Exit Do
Loop
While ie.busy
DoEvents
Wend
ie.document.getElementById("name").Value = objItem.SenderName
ie.document.getElementById("subject").Value = objItem.Subject
ie.document.getElementById("message").Value = objItem.Body
dtTimer = Now
lAddTime = TimeValue("00:00:20")
Set ie = Nothing ' If you want to close it.
'Dim PageNumber As Object
Set objItem = Nothing
Set objMail = Nothing
End Sub
Function GetCurrentItem() As Object
Dim objApp As Outlook.Application
Set objApp = Application
On Error Resume Next
Select Case TypeName(objApp.ActiveWindow)
Case "Explorer"
Set GetCurrentItem = _
objApp.ActiveExplorer.Selection.Item(1)
Case "Inspector"
Set GetCurrentItem = _
objApp.ActiveInspector.currentItem
Case Else
End Select
End Function
https://stackoverflow.com/questions/62049233
复制相似问题