关于批处理发送邮件的问题!
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于批处理发送邮件的问题!相关的知识,希望对你有一定的参考价值。
大家看这个代码(是我从网上拷贝的,运行时需要nc.exe):
@echo off
set "life=test.conf"
:start
cls
::::::::::::::::::::::::::::::::::::::::
:name_b
title 批处理发送邮件→1/5
cls
set name=
set /p name=请输入邮箱用户名:
if *%name%==* goto name_b
echo %name%|findstr "^[0-9a-zA-Z_-=]*$" >nul ||(echo 语法错误,任意键返回&pause>nul&goto name_b)
echo 必须保证和上面base64编码前的是同一用户名
:name__b
set name_=
set /p name_=请输入邮箱用户名(非base64编码的):
if *%name_%==* goto name__b
:pass_b
title 批处理发送邮件→2/5
cls
set pass=
set /p pass=请输入邮箱密码:
if *%pass%==* goto pass_b
echo %pass%|findstr "^[0-9a-zA-Z_-=]*$" >nul ||(echo 语法错误,任意键返回&pause>nul&goto pass_b)
:sjr_b
title 批处理发送邮件→3/5
cls
echo 格式为xxx@xxx.xxx 例如:test@test.com
set sjr=
set /p sjr=请输入收件人:
if *%sjr%==* goto sjr_b
echo %sjr%|findstr "^[0-9a-z]*\@[0-9a-z]*\.[a-z]*$" >nul ||(echo 语法错误,任意键返回&pause>nul&goto sjr_b)
:zt_b
title 批处理发送邮件→4/5
cls
set zt=
set /p zt=请输入邮件的主题:
if *%zt%==* goto zt_b
:zw_b
title 批处理发送邮件→5/5
cls
set zw=
set /p zw=请输入邮件的正文:
if *%zw%==* goto zw_b
::写nc调用的脚本
>%life% echo helo cn-dos
>>%life% echo AUTH LOGIN
>>%life% echo %name%
>>%life% echo %pass%
>>%life% echo mail from: ^<%name_%@163.com^>
>>%life% echo rcpt to: ^<%sjr%^>
>>%life% echo data
>>%life% echo From: %name_%@163.com
>>%life% echo To: %sjr%
>>%life% echo Subject: %zt%
>>%life% echo MIME-Version: 1.0
>>%life% echo Content-Type: text/plain
>>%life% echo.
>>%life% echo %zw%
>>%life% echo .
>>%life% echo quit
pause
cls
echo 正在获取smtp.163.com的ip
for /f "tokens=4 delims= " %%? in ('ping -n 1 smtp.163.com ^|find /i "Ping statistics for"') do (set "ip_=%%?")
set "ip=%ip_::=%"
if *%ip%==* (echo 没有获取到ip,可能网络有问题&pause>nul&goto :eof)
echo %ip%|findstr "^[0-9]*\.[0-9]*\.[0-9]*\.[0-9]*$">nul||(echo 没有获取到ip,可能网络有问题&pause>nul&goto :eof)
echo ip获取完成
echo 正在发送邮件
::nc连接smtp.163.com 25执行%life%中的命令发邮件
nc -nvv %ip% 25 < %life%
echo 发送完成,任意键开始继续发送
del /f/q %life%>nul
pause>nul&goto sjr_b
goto :eof
但是运行之后,做到最后一步进进行不下去了,如下图:
关于从 php 发送电子邮件的意见
【中文标题】关于从 php 发送电子邮件的意见【英文标题】:Opinion on sending emails from php 【发布时间】:2011-01-09 20:45:53 【问题描述】:我正在准备一个向注册用户发送电子邮件通知的网站。根据我的经验,我知道,发送电子邮件对于 PHP 来说是一个痛苦的过程,尤其是当我们谈论成千上万的邮件时。我的一个网站不时向 1000-1500 人发送电子邮件。 PHP 大约需要 5 分钟才能完成,所以我们在服务器负载最低的时候运行它一夜。我正在使用没有任何 SMTP 的本机 mail()
函数。这在专用服务器上运行良好,但我不是这个解决方案的忠实粉丝。
我希望能够随时发送类似的金额,而不会冒服务器宕机(并将其列入黑名单)的风险。 我读过,理想的解决方案是每隔几分钟从由 Cron 触发的脚本分批发送电子邮件(比如 20 封)。在我看来,这似乎是一个非常合理的想法,但是...加载?
我坚持使用我的服务器来发送邮件,而不是任何外部解决方案。
附言。我找到了这样的解决方案:http://www.mywebcron.com/,但这有什么好处吗?
编辑
只是补充:
我正在使用 CodeIgniter, 从我当前的服务器发送电子邮件的速率通常是每封电子邮件 0.2 秒。【问题讨论】:
SwiftMailer 有一个 CodeIgniter 包装器;它在 wiki 中,试一试:codeigniter.com/wiki/CI_SWIFT_MAILER 【参考方案1】:使用PHPmailer或SwiftMailer等PHP邮件类,可以直接通过SMTP发送邮件,这样会快很多。 是的,发送大量电子邮件最好通过 cron 完成,因此您每分钟发送 X 封电子邮件。您将通过这种方式避免服务器过载。 如果您无法在您的服务器上创建 cron 作业,我建议您更换您的托管服务提供商,否则您链接的网站是您唯一可行的选择(但是您以这种方式依赖于某些第三方,这不是很酷)
【讨论】:
作为对 Jan 的回答的补充:如果您无法在服务器上安排 cron 作业(就像最便宜的托管解决方案一样),有一些纯 php 替代方案可以运行预定作业:@ 987654323@ 是其中一种选择。【参考方案2】:如果您不能使用定期作业,您可能需要研究像 Gearman 这样的排队解决方案。
您想要做的是将所有电子邮件推送到队列中,并让 1 个或多个长期运行的工作人员从队列中挑选工作。如果您想在系统中添加延迟,只需在其中添加一个 sleep 即可。
一些非常基本的伪代码:
#wherever you launch the jobs from
for each user
gearman.push(user.generateEmail())
#in your consumer script
while true
message = gearman.consume()
message.send()
sleep(5)
【讨论】:
以上是关于关于批处理发送邮件的问题!的主要内容,如果未能解决你的问题,请参考以下文章