关于使用VBA发送电子邮件的后续行动

Hum*_*000 9 email excel vba excel-vba

这是有关使用VBA发送电子邮件的几条消息的后续内容.

大多数建议使用Outlook,CDO或MAPI:

Set appOL = CreateObject("Outlook.Application") 

Set msgOne = CreateObject("CDO.Message") 

Set mapi_session = New MSMAPI.MAPISession
Run Code Online (Sandbox Code Playgroud)

但显然Outlook将要求我更改我们的工作组安全设置,CDO和MAPI将要求我添加DLL或其他东西.

我正在尝试使用Excel来组织工作中的组分配,我无法以任何方式修改其他人的计算机.

有没有更简单的方法从Excel宏发送电子邮件?
我需要的只是消息正文中的一个文本块,没有附件.

我整个星期都在浏览谷歌,MSDN和StackOverflow,而且我被困在一条缓慢的船上无处可去.

Sid*_*out 9

建立Marc提到的,这是一个久经考验的版本.

Option Explicit

Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, _
ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, _
ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long

Sub SendMail()
    Dim objMail As String
    Dim oMailSubj, oMailTo, oMailBody As String

    On Error GoTo Whoa

    oMailSubj = "YOUR SUBJECT GOES HERE"
    oMailTo = "ABC@ABC.COM"
    oMailBody = "BLAH BLAH!!!!"
    objMail = "mailto:" & oMailTo & "?subject=" & oMailSubj & "&body=" & oMailBody

    ShellExecute 0, vbNullString, objMail, vbNullString, vbNullString, vbNormalFocus

    Application.Wait (Now + TimeValue("0:00:03"))
    Application.SendKeys "%s"

    Exit Sub
Whoa:
    MsgBox Err.Description
End Sub
Run Code Online (Sandbox Code Playgroud)

跟进

谢谢(你的)信息.我已经排除了ShellExecute,因为它将整个参数字符串限制为250个字符,我需要大约2000个消息.但看起来SE是唯一可以在我的情况下工作的选项. - Humanoid1000 7小时前

这是"可怕的(我喜欢JFC说的方式!!!)"我在评论中提到的方式很漂亮:) BTW我只有Outlook作为我的默认客户端所以我用它测试了它.

Option Explicit

Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, _
ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, _
ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long

Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

Sub SendMail()
    Dim objMail As String
    Dim oMailSubj As String, oMailTo As String
    Dim i As Long
    Dim objDoc As Object, objSel As Object, objOutlook As Object
    Dim MyData As String, strData() As String

    On Error GoTo Whoa

    '~~> Open the txt file which has the body text and read it in one go
    Open "C:\Users\Siddharth Rout\Desktop\Sample.Txt" For Binary As #1
    MyData = Space$(LOF(1))
    Get #1, , MyData
    Close #1
    strData() = Split(MyData, vbCrLf)

    Sleep 300

    oMailSubj = "YOUR SUBJECT GOES HERE"
    oMailTo = "ABC@ABC.COM"
    objMail = "mailto:" & oMailTo & "?subject=" & oMailSubj

    ShellExecute 0, vbNullString, objMail, vbNullString, vbNullString, vbNormalFocus

    Sleep 300

    Set objOutlook = GetObject(, "Outlook.Application")
    '~~> Get a Word.Selection from the open Outlook item
    Set objDoc = objOutlook.ActiveInspector.WordEditor
    Set objSel = objDoc.Windows(1).Selection

    objDoc.Activate

    Sleep 300

    For i = LBound(strData) To UBound(strData)
        objSel.TypeText strData(i)
        objSel.TypeText vbNewLine
    Next i

    Set objDoc = Nothing
    Set objSel = Nothing

    '~~> Uncomment the below to actually send the email
    'Application.Wait (Now + TimeValue("0:00:03"))
    'Application.SendKeys "%s"

    Exit Sub
Whoa:
    MsgBox Err.Description
End Sub
Run Code Online (Sandbox Code Playgroud)

快照

包含消息的文本文件

在此输入图像描述

在发送之前发送电子邮件

在此输入图像描述


Mar*_*arc 5

您可以使用该Shell命令.

Shell("mailto:username@isp.com")
Run Code Online (Sandbox Code Playgroud)

如果Outlook是您的默认电子邮件程序,我认为Windows会正确解释它(它是从Windows RUN对话框中执行的,但不确定是否来自VBA).试试看.我现在不在Excel的前面.

查看"mailto"的参数,了解如何将主题和正文添加到该字符串.

更正: 这只会生成电子邮件,但不会发送.无视我的回答.