我创建了一个小的 shell 脚本,它将所有输入记录到一个日志文件中,我以为我可以用它来替换 sendmail 二进制文件,从而实现一种简单的方法来模拟电子邮件传送,而无需实际设置一个工作的 sendmail。
然而,这失败了。由于我无法理解的原因。
我查看了 PHP mail.c 源代码,据我所知(请注意,我在 C 方面不是很有经验),PHP 直接执行并与二进制文件对话(在 中设置sendmail_path)。但是,当我用脚本替换 sendmail 二进制文件时,不会创建任何日志文件,并且替换 sendmail 的脚本在执行时将始终创建一个日志文件,无论是否存在输入。
脚本本身运行良好。它的返回码应该与sendmail 的返回码一致。不同之处在于,无论输入如何,我的脚本总是返回 0,因为我对检查输入是否有效并不真正感兴趣 - 只是我得到了一些。
是否可以实现我想要的,即使用 sendmail 模拟器?
脚本源码如下:
#!/bin/bash
LOGDIR=/tmp/sendmail-sim
NOW=$(date +%Y%m%dT%H%M)
CNT=1
FILENAME="$LOGDIR/$NOW.$CNT.log"
while [ -f $FILENAME ]; do
CNT=$(($CNT + 1))
FILENAME="$LOGDIR/$NOW.$CNT.log"
done
echo "$0 $*" > $FILENAME
while read BUF
do
echo $BUF >> $FILENAME
done
exit 0
Run Code Online (Sandbox Code Playgroud)
附言。我当前的 sendmail (或者实际上是 postfix)确实从 PHP 接收电子邮件,但我不想实际发送任何电子邮件或需要在开发中挖掘其邮件队列。
是否-f在此邮件功能中正确设置了附加参数.
@mail("example@exmaple.com.uy",$title,$body,$headers,"-f");
Run Code Online (Sandbox Code Playgroud)
我是X Warning从一些服务器获取的.
对不起基本问题,但文档的某些部分让我感到困惑(特别是一些用户评论).
提前致谢!
我一直在运营一个网站,这个网站已经有了显着的成长.现在在我的数据库中我有大约40k的电子邮件,我打算向那些获得某种订阅源的人发送电子邮件.我们的想法是能够通过电子邮件发送给所有订阅的人.
至于现在我一直在尝试使用phplist,阅读电子邮件并发送它们,但我发现它需要花费很多时间来发送所有电子邮件.
首先,我想知道是否有任何网页列表,我必须订阅我的域名,以便让gmail,hotmail,雅虎等知道我不是垃圾邮件,我将发送"很多"每天/每周的电子邮件?
另一个问题是,有没有更好的方法在短时间内发送电子邮件?我一直在考虑这样的事情,运行一个cronjob同时发送电子邮件给那些电子邮件以字母a,b,c,d,e等开头的人,这样我就可以并行发送电子邮件,但我不知道如果那是个好主意.我想要的另一件事是为每个用户创建一个linux用户,同时为每个用户运行一个cronjob,它将电子邮件发送到相应的电子邮件.
我不知道这是否可行,所以我会提供任何帮助或建议.非常感谢!:)
PD:我希望能够平均30-40分钟发送电子邮件,并且还可以使用hotmail,gmail,yahoo等来将我归类为垃圾邮件.现在我正在使用只有一个AMI实例的亚马逊免费EC2帐户,但我可以支付任何其他服务或我需要的额外实例来完成工作.
我试图找到一个解决方案,希望运气好,所以我决定将其发布在这里。
问题是,当我使用 javaMail 发送消息时,它会自动生成一个消息 ID(我将其存储到数据库中,然后识别对此消息的回复),但当消息发送时,由于某种原因,smpt 服务器会更改它。已发送,因此我无法追踪与此消息相关的任何内容。
例如
我首先通过 gmail 向与我的邮件客户端同步的帐户之一发送一条消息,然后我使用我的消息客户端检查该消息,一切正常,Message-Id 是
<CAPDSfCN1qPAhBCRmFK-zwP=MM=KjgpYuvhVRFAPwz1PjOqtnFA@mail.gmail.com>
然后我通过我的消息客户端发送此消息的回复,javaMail 生成的 id 是
<1907960987.0.1322086080735.JavaMail.root@smtp.live.com>
最后,当我去检查我的电子邮件帐户中的回复时,它的标题中有以下值
Message-ID: <BLU0-SMTP33091BE2B32A7F46E370665C2C90@phx.gbl>失败
In-Reply-To: <CAPDSfCN1qPAhBCRmFK-zwP=MM=KjgpYuvhVRFAPwz1PjOqtnFA@mail.gmail.com>好的
正如你所看到的,消息 ID 已更改,我希望它是
<1907960987.0.1322086080735.JavaMail.root@smtp.live.com>
为什么会发生这种情况?
我很感激任何帮助
谢谢你们
- 编辑
根据建议,我使用 javaMail 中的 smtpsend demo 进行了测试(我实现了 MimeMessage 的子类来生成我自己的 Message-Id)。
java -jar -Dmail.smtp.starttls.enable=true -Dmail.smtp.port=587 SMTPSend.jar -d -M smtp.live.com -U myaccount@hotmail.com -P mypass -o myaccount@hotmail.com -A anotheraccount@gmail.com
发送消息时,在 smtpsend 输出之间,生成了 Message-Id
<60eea6ae-2657-41bd-b475-3a57eff885ac@mydomain.com>
但是,当我去 anotheraccount@gmail.com 上查看此消息时,消息 ID 有所不同
<BLU0-SMTP109215E6BB99B93FC106B1E88B00@phx.gbl>
为什么它会动态更改我的消息 ID...我不明白
--编辑2
我注意到,当我从 Hotmail 帐户发送邮件时,问题现在就发生了,当我从 gmail 帐户发送邮件时,消息 ID 不再改变(我认为实现我自己的消息 ID …
我们的网络应用程序代表其用户发送邮件。标头字段设置如下:
HEADERFIELD MAILADDRESS NAME
------------------------------------------------
from: [our mail address] [users name]
reply-to: [users mail address] [users name]
sender: [our mail address] [name of app]
Run Code Online (Sandbox Code Playgroud)
这运作良好,但在某些情况下,当收件人回复邮件时,回复会返回给我们(我们的邮件地址)。
这引出了我的问题:是否存在不尊重该reply-to领域的邮件客户端,或者我们是否必须在其他地方寻找解释?
我正在尝试使用 Zoho 的 SMTP 服务器从 MyBB 安装发送注册电子邮件。但是,电子邮件永远不会发送,当我检查日志时,我注意到错误是。
Month Day Year:Hour:Minute host=smtp.zoho.com tls=on auth=on user=user[at]mydomain.com from=user[at]mydomain.com recipients=some.user[at]gmail.com smtpstatus=553 smtpmsg='553 Relaying disallowed' errormsg='the server did not accept the mail' exitcode=EX_UNAVAILABLE
Run Code Online (Sandbox Code Playgroud)
(部分部分被屏蔽以隐藏私人信息!)
这是php.ini中设置的sendmail路径
sendmail_path = "/usr/bin/msmtp -C /etc/msmtp/myserver --logfile /var/log/msmtp/myserver.log -a default -t"
Run Code Online (Sandbox Code Playgroud)
(部分部分被屏蔽以隐藏私人信息!)
这是 MSMTP 的 myserver 配置
# Define here some setting that can be useful for every account
defaults
logfile /var/log/msmtp/general.log
# Settings for default account
account default
protocol smtp
host smtp.zoho.com
tls on
tls_starttls off …Run Code Online (Sandbox Code Playgroud) 我可以使用 sendmail 在 Linux 机器上使用任何电子邮件地址发送电子邮件而无需密码。有没有这样的选项可以在 Windows 中使用 node.js 以编程方式执行此操作?
所以我有一个带有 ip、域(www.example-sato.com)的服务器,并且有一个 nodejs/express.js 应用程序在它上面运行。
当用户注册时,我想向用户发送一封电子邮件,发件人为no-reply@example-sato.com.
我一般应该怎么做?
我已经用 gmail 设置了 smtp。当我使用 send_mail 时,发件人电子邮件未显示在接收电子邮件的帐户中。
Django设置.py
# DEFAULT_FROM_EMAIL = 'sendTo@gmail.com'
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'smtp.gmail.com'
EMAIL_PORT = 587
EMAIL_HOST_USER = 'sendTo@gmail.com'
EMAIL_HOST_PASSWORD = '**********'
EMAIL_USE_TLS = True
Run Code Online (Sandbox Code Playgroud)
使用
$ python manage.py shell
Run Code Online (Sandbox Code Playgroud)
我发送邮件如下,
>>> from django.core.mail import send_mail
>>> send_mail('subject is', 'message is and is not 12342', 'fromEmail@gmail.com', ['sendTo@gmail.com'])
1
>>>
Run Code Online (Sandbox Code Playgroud)
我在我的 gmail 帐户中收到这封电子邮件(与用于 smtp 的 gmail 帐户相同),但来自电子邮件显示为 sendTo@gmail.com,应该是 fromEmail@gmail.com
我正在测试https://javaee.github.io/javamail/FAQ中所述的sendmail示例 .这是一个简单的邮件发送操作,没有SSL,也没有附件.它在任何地方都可以正常工作,但在客户端上,当邮件api变得更新时,我们会有一个去线性能.
服务器是windows,java 1.8.131,在所有测试用例中使用相同的邮件服务器和邮件帐户以及相同的地址和java源.唯一的区别是使用的mailapi.我运行程序
java -cp javax.mail.1.XXjar; sendmailtesttool.jar SendMail
我为每个邮件api尝试了100次并获得平均持续时间.
使用的来源:
Properties properties = new Properties();
properties.put("mail.smtp.host", 192.168.0.X); // use default port25
Session session = Session.getInstance(properties);
MimeMessage msg = new MimeMessage(session);
msg.setFrom(..);
msg.setSubject(..);
msg.setRecipients(..);
//no attachments
MultiPart mp = new MultiPart();
MimeBodyPart bp = new MimeBodyPart();
DataSource ds = ByteArrayDataSource("foo"..);
DataHandler dh = new DataHandler(ds);
bp.setDataHandler(dh);
mp.addBodyPart(bp);
msg.setContent(mp);
Transport transport = session.getTransport("smtp");
transport.connect(host, username, password);
msg.saveChanges(); // is really needed ? (no reply/forward) …Run Code Online (Sandbox Code Playgroud)