计算机被锁定时如何发送电子邮件?

Posted

技术标签:

【中文标题】计算机被锁定时如何发送电子邮件?【英文标题】:How to Send Email When Computer is Locked? 【发布时间】:2012-04-29 23:23:03 【问题描述】:

我想使用 Excel VBA 发送 Outlook 电子邮件。

代码Sendupdate 在手动运行时有效。

我的第二个宏 StartTimer 旨在在我不在办公桌前的设定时间执行上述操作。

当计算机被锁定时,电子邮件不会发送。当我回到办公桌前,电子邮件作为草稿挂在那里,我需要点击send 按钮。

Sub SendUpdate()
    Recipient = "x@y.com"
    Subj = "update"
    Dim msg As String
    msg = "hello”
     
    HLink = "mailto:" & Recipient & "?"
    HLink = HLink & "subject=" & Subj & "&"
    HLink = HLink & "body=" & msg
    ActiveWorkbook.FollowHyperlink (HLink)
        Application.Wait (Now + TimeValue("0:00:01"))
        Application.SendKeys "%s"
    End Sub
     
    Sub StartTimer()
    Application.OnTime TimeValue("18:00:00"), "SendUpdate"
     
End Sub

有没有办法确保邮件被推送?

【问题讨论】:

对于这类操作,我从不使用 Excel。我使用 Windows 任务计划程序和 vbscript 文件从 excel 发送电子邮件。如果你有兴趣,我可以给你举个例子。绝对不是Application.SendKeys "%s",因为当你的系统被锁定时它不会工作。 嗨,悉达多,感谢您的反馈。如果你不介意,我想看看你如何做到这一点的例子。非常感谢! 好的,我需要至少 30 分钟来编写它,测试它,然后用截图上传到这里 :) 你能确认你的windows操作系统吗? Windows XP。它是我的工作计算机(所以有通常的登录等)。 【参考方案1】:

SendKeys 可能是罪魁祸首。我仍然使用 CDO 通过 Excel VBA 发送电子邮件。这应该可以帮助您入门:http://www.rondebruin.nl/cdo.htm

【讨论】:

【参考方案2】:

我将分 3 步打破这个“教程”

1) 编写 Excel 宏

2) 准备你的 vbscript 文件

3) 在 Windows 任务计划程序中设置任务


编写 EXCEL 宏


在 Excel 中打开一个新文件并在模块中粘贴此代码

Option Explicit

Const strTo As String = "abc@abc.com"
Const strCC As String = "def@abc.com"  '<~~ change "def@abc.com" to "" if you do not want to CC
Const strBCC As String = "ghi@abc.com" '<~~ change "ghi@abc.com" to "" if you do not want to BCC

Sub Sample()
    Dim OutApp As Object, OutMail As Object
    Dim strbody As String, strSubject As String

    strSubject = "Hello World"
    strbody = "This is the message for the body"

    Set OutApp = CreateObject("Outlook.Application")

    Set OutMail = OutApp.CreateItem(0)

    On Error Resume Next
    With OutMail
        .To = strTo
        .CC = strCC
        .BCC = strBCC
        .Subject = "This is the Subject line"
        .Body = strbody
        .Send
    End With
    On Error GoTo 0

    Set OutMail = Nothing
    Set OutApp = Nothing
End Sub

如果您使用 Excel 2007 及更高版本,则将 Excel 文件另存为 C:\Tester.Xlsm;如果您使用 Excel 2003,则将其保存为 C:\Tester.Xls 并退出


准备 VBSCRIPT 文件


打开记事本,然后粘贴此代码。根据需要更改扩展名“.xls”。

Dim xlApp
Dim xlBook

Set xlApp = CreateObject("Excel.Application")
Set xlBook = xlApp.Workbooks.Open("C:\Tester.xls", 0, True)
xlApp.Run "Sample"
xlBook.Close
xlApp.Quit

Set xlBook = Nothing
Set xlApp = Nothing

将文件另存为Tester.vbs 并关闭它


在 WINDOWS 任务调度器中设置任务


您能确认一下您的 Windows 操作系统吗? – Siddharth Rout 36 分钟前

Windows XP。它是我的工作计算机(通常的登录名等)。 – 18 分钟前的凯恩斯十字路口

点击开始按钮 |所有程序 |配件 |系统工具 |安排任务以获取此窗口

双击“添加计划任务”得到这个窗口

点击下一步

点击“浏览”,选择我们之前创建的vbs文件,点击“打开”

您获得的下一个窗口至关重要,因为在这里我们需要在脚本需要运行时提及

完成需要后,点击下一步。

在此窗口中,输入您的登录详细信息,以便即使您的屏幕被锁定,脚本也可以运行。

完成后单击“下一步”,然后在下一个窗口中单击“完成”。您的任务计划程序现在看起来像这样

你已经完成了


锁上你的电脑,去喝杯咖啡休息一下;)当你回来时(取决于你在任务计划程序中设置的时间以及你的休息时间),电子邮件会已发送。

HTH

【讨论】:

这很棒,会试一试。再次感谢 - 非常感谢。 不是我有问题,而是你在几秒钟内选择了我的答案:) 你至少应该自己测试一下;) +1 还要确保任务计划程序服务正在运行。 (默认开启,但系统管理员通常通过组策略将其关闭) @Pradeep Kumar:是的。非常真实。 顺便说一句,如果添加 Windows 7 任务计划程序的屏幕截图会帮助社区吗?界面与XP有很大不同。 :p【参考方案3】:

我使用 htmljavascript setInterval 来运行 vba 代码来克服这个问题。 代码:

<html>
<script>

var flag = false;
var xlApp;
var xlBook;
var i = 0;

function processExcel()

//Open the excel containing macro for the first time
if(flag==false)

  xlApp = new ActiveXObject ( "Excel.Application" );
//Your Excel containing VBA code
  xlBook=xlApp.Workbooks.Open("Count1.2.xlsm")


// "a" is the VBA macro
 xlApp.Run("a");

flag=true;


 i++;
 window.status="Last Updated " + new Date();




var w
function run()


processExcel();

 w= setInterval("processExcel()",120000);



function stop()


 clearInterval(w);




</script>

<body >

<input type="button" value="Start" onclick="run()" />
<input type="button" value="Stop"  onclick="stop()"/>


</body>
</html>

【讨论】:

以上是关于计算机被锁定时如何发送电子邮件?的主要内容,如果未能解决你的问题,请参考以下文章

无法从 Ghost 发送电子邮件

发送电子邮件时内存泄漏

SMTP发送锁定了我的文件 - c#

.Send 不起作用时如何发送邮件?

发送python电子邮件时添加excel文件附件

Logcat 被“发送垃圾邮件”,导致“输出过多无法处理”