电子邮件对我们至关重要,办公室里的一些人对电子邮件的发送或接收速度非常敏感。我正在寻找可以做到以下几点的服务/产品的建议:
- 将电子邮件从外部来源发送到内部邮箱。
- 跟踪电子邮件被接收并进入邮箱所需的时间。
相反:
- 从内部邮箱发送电子邮件给第三方。
- 跟踪电子邮件被接收并进入邮箱所需的时间。
如果能够指定特定的有效负载来更紧密地模仿真实的电子邮件就更好了。
我也愿意建立自己的系统,但在开始之前我希望得到一些关于如何实现这一目标的建议。
答案1
答案2
SMTP 是一种尽力而为的投递系统,可能需要相当长的时间。尤其是现在发件人和收件人之间有多个内容过滤器。许多邮件系统直到收到邮件后才会发送投递延迟通知。4个小时邮件发送后,我(我相信您也一样)知道办公室里有几个用户会注意到某些事情需要一分钟以上的时间才能到达目的地。
我曾吟诵过:
电子邮件不是即时通讯
偶尔向人们提出。例如,当被问及为何某位高级经理送货缓慢时,经理们会提出这样的问题。
由于您使用的是 Exchange,我敢打赌您想要一个系统,当邮件到达用户的 MAPI 邮箱时,该系统会标记邮件已到达,并让 Outlook 转到 Bing。
我个人不知道有现成的这种系统,但如果你愿意,可以编写一个。微软对如何通过 .NET 代码与 Exchange 交互毫不掩饰,编写一些东西来通过 Freemailer 每隔 15 分钟左右发送一次消息并查看它何时到达是相当容易的。
但这只能检查免费邮件发送者和您之间的邮件路径。邮件延迟发生在源头,即您无法控制的源头,比内部延迟更常见。不幸的是,无法有效地监控这种情况。如果您的目标是提供图表来让经理不再纠缠您,那么这就是胜利的条件。但如果您正在寻找一个诚实的邮件系统邮件传递时间指标,恐怕您运气不佳。
答案3
用于检查电子邮件周转时间的快速而粗糙的脚本。
需要 PHPMailer - phpmailer.worxware.com
<?php
# emailcheck.php
# v1.0
# script to check email deliverabiltiy time
# Tibor Szentmarjay
# test email address
$test_email = "[email protected]";
$test_name = "Delivery Test";
$smtp_server = "smtp.gmail.com";
$smtp_user = "[email protected]";
$smtp_pass = "mypass";
$from_email = "[email protected]";
$from_name = "myname";
$imap_server = "testaddress.com:143";
$imap_flags = "/novalidate-cert";
$imap_user = "[email protected]";
$imap_pass = "mypass";
$timeout = 1200; // seconds
# How it works?
# - generate unique ID
# - send email through SMTP
# - check mailbox though IMAP
require("class.phpmailer.php");
$unique_id = uniqid();
# sending the email
$mail = new PHPMailer();
$mail->SMTPDebug = 1;
$mail->Subject = $unique_id;
$mail->IsSMTP(); // telling the class to use SMTP
$mail->Host = $smtp_server; // SMTP server
$mail->From = $from_email;
$mail->FromName = $from_name;
$mail->Sender = $from_email;
$mail->AddAddress($test_email,$test_name);
$mail->SMTPAuth = true; // authentication enabled
$mail->SMTPSecure = 'ssl'; // secure transfer enabled REQUIRED for GMail
$mail->Port = 465;
$mail->Username = $smtp_user;
$mail->Password = $smtp_pass;
$mail->Body = $unique_id;
if(!$mail->Send()){ print " Mailer Error: " . $mail->ErrorInfo;} else { $sending_time = time(); }
$mail->ClearAddresses();
# end sending the email
# checking the mail
$criteria = "SUBJECT \"$unique_id\"";
do {
# connect to the server (needed everytime to refresh the message list)
if ( ! $mbox = imap_open("{testaddress.com:143/novalidate-cert}INBOX",$imap_user,$imap_pass) ) { print "Cannot open $imap_server."; print_r(imap_errors()); exit(1); };
# search for the sent mail
$message = imap_search($mbox,$criteria);
if ($message) imap_delete($mbox,$message[0]);
imap_close($mbox);
$final_time = (time()-$sending_time);
sleep(1);
}
while ($message === false && $final_time < $timeout);
# message arrived or timeout
# print time
echo $final_time;
?>