Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows 通过批处理文件定期通过电子邮件发送文件_Windows_Email_Batch File_Zip - Fatal编程技术网

Windows 通过批处理文件定期通过电子邮件发送文件

Windows 通过批处理文件定期通过电子邮件发送文件,windows,email,batch-file,zip,Windows,Email,Batch File,Zip,我有个初学者的问题。我有一台收集数据的远程计算机(业余的数学资料)。数据每天存储在文本文件中。每个文件都以其日期命名:28_02-2014.txt、01_03_2014.txt等 谁能帮我创建一个批处理文件,它会自动通过电子邮件发送这样一个文本文件。甚至可以选择从所有txt文件创建zip文件。我可以每月删除一次文件夹,因此即使发送包含31个文本文件的zip文件也不会影响带宽(可能每月300kb) 到目前为止,我的问题是: 视窗7 我不知道如何创建一个批处理文件,将所有文件压缩到一个文件夹中 我不

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

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

到目前为止,我的问题是:

视窗7

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

  • 拜托,有人能帮我吗?无论哪种解决方案更简单:要么从特定文件夹发送最新文件,要么将整个文件夹压缩成一个文件并发送。

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

    在这一行中,
    set fileattach=“d:\myfolder\%datestamp%.txt”
    更改文件夹,并将日期戳设置为
    dd\u mm-yyyy
    格式,因此文件名应按原样适用于您

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

    在set语句块中更改
    服务器设置
    密码
    ,以适合您,然后对其进行测试

    如果适合的话,可以将批处理文件安排在每日循环中

    @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
    

    你打算如何发送电子邮件?您是否有SMTP服务器要使用,或者可能有gmail帐户?两者都可以。至于压缩,你能安装一个像这样的程序吗?此外,文件名的结构也不相同。一个中有所有下划线,另一个中有下划线和破折号。是这样还是o型?非常感谢你的回答。我还有一个问题。我已将第6行从“设置”日期戳=%DD%\u%MM%-%YYYY%”更改为“设置”日期戳=%MM%\u%DD%\u%YYYY%”。因为我意识到我的文件有这样的结构。接下来,我设置了所有服务器详细信息,并提供了“set fileattach”参数的正确路径。我没有做任何进一步的更改,我的邮件即将到达,但没有附件。我做错什么了吗?我需要查看其中带有
    set fileattach=
    的行才能找到答案。您输入了一个错误,或者该文件不存在于该行中的格式中。下面是一行:set fileattach=“C:\Users\Michał\AppData\Roaming\Meteo\logged_files\%datestamp%.txt”我尝试了以下行:set fileattach=“C:\photo.jpg”,它可以很好地附加到电子邮件中。因此,要么路径有问题,要么“datestamp”函数工作不正常,无法识别文件夹中的文件。或者我的计算机名有一个非拉丁字符(Michał),在bat文件中应该以不同的方式表示?非拉丁字符可能是问题所在。它可能需要不同的代码页来处理该字符。在开始
    setlocal
    的那一行之后,然后放在下一行
    chcp 1252
    上,然后查看它是否发送文件。如果没有,则将
    1252
    更改为
    850
    ,然后重试。我没有其他代码页的经验。