首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >VBA:在基于Web的Outlook中填充输入

VBA:在基于Web的Outlook中填充输入
EN

Stack Overflow用户
提问于 2020-05-27 17:28:05
回答 2查看 278关注 0票数 0

在基于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分配一个电子邮件地址?

我的代码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
        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
EN

回答 2

Stack Overflow用户

发布于 2020-05-27 19:25:24

您需要下面的CDO校验码来设置电子邮件和使用CDO的电子邮件。它不依赖于MAPI或CDO,因此是无对话框的,也不使用您的邮件程序发送电子邮件。

为什么在VBA中使用CDO代码而不是Outlook自动化或SendMail?

  1. 您使用的是什么邮件程序并不重要(它只使用SMTP服务器)。
  2. 您使用的是哪个Office版本都不重要(97…2016)
  3. 您可以在邮件正文中发送范围/工作表(有些邮件程序不能这样做)
  4. 您可以发送任何您喜欢的文件(Word、PowerPoint、TXT文件、….)
  5. 无安全警告,如果您在循环中发送大量邮件,则非常有用。

你可以在here上找到更多信息

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 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
票数 0
EN

Stack Overflow用户

发布于 2020-05-27 21:03:54

Helo,在我之前的回答中,我做了一个变通方法,哈哈,对不起,你可以使用以下代码来使用ie.document.getElementById("name").Value = objItem.SenderName在web表单上填写输入

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62049233

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文