【问题标题】:Send file(s) by email on a regular basis via batch file通过批处理文件定期通过电子邮件发送文件
【发布时间】:2014-02-28 11:52:44
【问题描述】:

我有一个初学者的问题。我有一台收集数据的远程计算机(业余气象学的东西)。数据每天都存储在一个文本文件中。每个文件都以其日期命名:28_02-2014.txt、01_03_2014.txt 等。

谁能帮我创建一个批处理文件,它会以某种方式自动通过电子邮件发送这样的文本文件。甚至可以选择从所有 txt 文件创建 zip 文件。我可以每月删除一次文件夹,所以即使发送一个包含 31 个文本文件的 zip 文件也不会影响带宽(可能每月 300kb)。

到目前为止我的问题:

Windows 7

  1. 我不知道如何创建一个批处理文件,它将所有文件压缩到一个文件夹中。
  2. 我不知道如何发送自动电子邮件。任务调度程序不允许输入服务器身份验证(用户/通行证)。我只能输入 SMTP 服务器名称,仅此而已。
  3. 即使我设法通过任务管理器以某种方式发送电子邮件,我也必须为每天创建一个操作,这似乎并不理想。

请问,谁能帮我解决这个问题?哪种解决方案更简单:要么从特定文件夹发送最新文件,要么将整个文件夹压缩成一个文件并发送。

【问题讨论】:

  • 您打算如何发送电子邮件?您是否有 SMTP 服务器可以使用或可能有 gmail 帐户?要么会工作。就压缩而言,你能安装像7-zip command line这样的程序吗?此外,文件名的结构也不相同。您在一个中包含所有下划线,在另一个中包含下划线和破折号。是这种情况还是o型?

标签: windows email batch-file zip


【解决方案1】:

XP Pro 及更高版本用于使用 WMIC 的日期例程:

在这一行set fileattach="d:\myfolder\%datestamp%.txt" 中更改文件夹,并将日期戳设置为dd_mm-yyyy 格式,因此文件名应该适合您。

文本文件将被附加,但不会被压缩。

在 set 语句块中更改 server settingspasswords 以适合您,并对其进行测试。

如果适合您,您可以将批处理文件安排为每日周期。

@echo off
for /f "tokens=2 delims==" %%a in ('wmic OS Get localdatetime /value') do set "dt=%%a"
set "YY=%dt:~2,2%" & set "YYYY=%dt:~0,4%" & set "MM=%dt:~4,2%" & set "DD=%dt:~6,2%"
set "HH=%dt:~8,2%" & set "Min=%dt:~10,2%" & set "Sec=%dt:~12,2%"

set "datestamp=%DD%_%MM%-%YYYY%"
:: email.bat :::::::::::::::::::::::::::::::::::::::::::::::::::::
@echo off
setlocal

:: use these settings to send from a gmail account
:: set port=465 and set SSL=True

:: use these settings for standard email SMTP port and no encryption
:: set port=25 and set SSL=False

:: Change these following items to use the same variables all the time
:: or use the command line to pass all the variables

set Port=25
set SSL=False
set From="myemail@myemailserver.com"
set To="recipient@server.com"
set Subject="Subject line"
set Body="Email Body in one line"
set SMTPServer="mailservername.myemailserver.com"
set User="username"
set Pass="password"
set fileattach="d:\myfolder\%datestamp%.txt"


:: This section sets the command line arguments
:: use this format:  CALL email.bat "myname@gmail.com" "RecipientEmailAddress@server.com" "Subject line" "Email Body in one line" "smtp.gmail.com"  "myname@gmail.com" "password" "d:\folder\filename to attach.txt"


if "%~7" NEQ "" (
set From="%~1"
set To="%~2"
set Subject="%~3"
set Body="%~4"
set SMTPServer="%~5"
set User="%~6"
set Pass="%~7"
set fileattach="%~8"
)

set "vbsfile=%temp%\email-bat.vbs"
del "%vbsfile%" 2>nul
set cdoSchema=http://schemas.microsoft.com/cdo/configuration
echo >>"%vbsfile%" Set objArgs       = WScript.Arguments
echo >>"%vbsfile%" Set objEmail      = CreateObject("CDO.Message")
echo >>"%vbsfile%" objEmail.From     = %From%
echo >>"%vbsfile%" objEmail.To       = %To%
echo >>"%vbsfile%" objEmail.Subject  = %Subject%
echo >>"%vbsfile%" objEmail.Textbody = %body%
if exist %fileattach% echo >>"%vbsfile%" objEmail.AddAttachment %fileattach%
echo >>"%vbsfile%" with objEmail.Configuration.Fields
echo >>"%vbsfile%"  .Item ("%cdoSchema%/sendusing")        = 2 ' not local, smtp
echo >>"%vbsfile%"  .Item ("%cdoSchema%/smtpserver")       = %SMTPServer%
echo >>"%vbsfile%"  .Item ("%cdoSchema%/smtpserverport")   = %port%
echo >>"%vbsfile%"  .Item ("%cdoSchema%/smtpauthenticate") = 1 ' cdobasic
echo >>"%vbsfile%"  .Item ("%cdoSchema%/sendusername")     = %user%
echo >>"%vbsfile%"  .Item ("%cdoSchema%/sendpassword")     = %pass%
echo >>"%vbsfile%"  .Item ("%cdoSchema%/smtpusessl")       = %SSL%
echo >>"%vbsfile%"  .Item ("%cdoSchema%/smtpconnectiontimeout") = 30
echo >>"%vbsfile%"  .Update
echo >>"%vbsfile%" end with
echo >>"%vbsfile%" objEmail.Send

cscript.exe /nologo "%vbsfile%"
echo email sent (if variables were correct)
del "%vbsfile%" 2>nul
goto :EOF

【讨论】:

  • 非常感谢您的回答。我还是有问题。我已将第 6 行从 'set "dateamp=%DD%_%MM%-%YYYY%"' 更改为 'set "dateamp=%MM%_%DD%_%YYYY%"。因为我意识到我的文件有这样的结构。再往下,我已经设置了所有服务器详细信息,并提供了“set fileattach”参数的正确路径。我没有进一步更改任何内容,我的邮件已经到达,但没有附件。我是不是做错了什么?
  • 我需要查看带有set fileattach= 的行才能弄清楚。要么你打错了,要么文件不存在该行中的格式。
  • 下面是下面一行:set fileattach="C:\Users\Michał\AppData\Roaming\Meteo\logged_files\%datesamp%.txt"
  • 我已尝试使用以下行:set fileattach="C:\photo.jpg" 并且它可以很好地附加到电子邮件中。因此,要么路径有问题,要么“日期戳”功能无法正常工作并且无法识别文件夹中的文件。或者也许我的计算机名称有一个非拉丁字符 (Michał),它应该在 bat 文件中以不同的方式表示?
  • 非拉丁字符可能是问题所在。它可能需要不同的代码页来处理该字符。在以setlocal 开头的行之后,然后放入下一行chcp 1252,然后查看是否发送文件。如果不是,请将1252 更改为850 并尝试一下。我没有其他代码页的经验。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-21
  • 1970-01-01
  • 2018-09-29
  • 2021-04-10
  • 1970-01-01
  • 2023-03-10
相关资源
最近更新 更多