我一直在编写一个脚本,使用Swiftmailer将电子邮件发送到存储在txt文件中的收件人列表。它应该从./receivers
文件夹中收集所有名为TH001.txt, TH002.txt
的电子邮件,......当我运行代码时,它会进入无限循环并出现错误:
"
PHP Notice: Undefined index: 0
in /var/www/sipnati/sendmail.php on line 37
PHP Notice: Undefined index: 0
in /var/www/sipnati/sendmail.php on line 37
"
看起来我通过解析./receivers
中文件的名称搞砸了一些东西
夹。我用PHP5.3运行Ubuntu Server 12.04。我完全陷入困境,任何指出错误的帮助都将不胜感激。
<?php
require_once 'swift_required.php';
define("SMTP_SERVER", "xxx");
define("FROM_NAME", "xxx");
define("FROM_EMAIL", "xxx");
define("USERNAME", "xxx");
define("PASSWORD", "xxx");
define("LOG_PATH", "./");
class sendMail {
public function sendMail() {
$transport = Swift_SmtpTransport::newInstance(SMTP_SERVER, 25)
->setUsername(USERNAME)
->setPassword(PASSWORD)
;
$mailer = Swift_Mailer::newInstance($transport);
/* $counter = file_get_contents("./variables.txt");
$emails_to_send = $counter + 200;
$file_counter = file_get_contents("./variables1.txt"); */
$scan=array_values(array_diff(scandir('./receivers/'), array('..', '.','.htaccess')));
$mails=array();
$c=count($scan);
if(isset($scan[0])){
for($i=0;$i<$c;$i++){
if(substr($scan[$i], strlen($scan[$i] - 3), 3) <> "txt"){
$tmp=file('./receivers/'.$scan[$i],FILE_IGNORE_NEW_LINES);
$mails=array_merge($mails,$tmp);
}
}
}
/* file_put_contents("./variables1.txt", $count-1); */
$regexp = '/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$/';
$count = 0;
if($c>0){
foreach ($mails as $key => $value) {
while ($count < count($mails)) { /* replaced $counter with count($mails) */
if (preg_match($regexp, $value) != 0) {
$message = Swift_Message::newInstance('Wonderful Subject')
->setFrom(array(FROM_EMAIL => FROM_NAME))
->setTo(array('receiver@domain.org', 'other@domain.org' => 'A name'))
->setSubject(file_get_contents('./thailand_subject.txt'))
->setBody(file_get_contents('./thailand_body.txt'))
;
if ($mailer->send($message)) {
$count++;
} else {
$not_sent[] = $value;
}
} else {
$not_sent[] = $value;
}
$count++;
}
/*file_put_contents("./variables.txt", $file_counter++);*/
break;
}
}
if (!isset($not_sent))
$not_sent = null;
$this->logToFile($count, count($mails), $not_sent);
}
private function logToFile($count, $on, $undelivered = null) {
$toLog = "Sent " . $count . "/" . $on . " mails. Not sent: \n" . print_r($undelivered, true);
file_put_contents(LOG_PATH . "MAIL_LOG_" . microtime(), $toLog);
}
}
$p = new sendMail();
?>
答案 0 :(得分:2)
新代码:
<?php
require_once 'swift_required.php';
define("SMTP_SERVER", "xxx");
define("FROM_NAME", "xxx");
define("FROM_EMAIL", "xxx");
define("USERNAME", "xxx");
define("PASSWORD", "xxx");
define("LOG_PATH", "./");
class sendMail {
public function sendMail() {
$transport = Swift_SmtpTransport::newInstance(SMTP_SERVER, 25)
->setUsername(USERNAME)
->setPassword(PASSWORD)
;
$mailer = Swift_Mailer::newInstance($transport);
$scan=array_values(array_diff(scandir('./receivers/'), array('..', '.','.htaccess')));
$mails=array();
$c=count($scan);
if(isset($scan[0])){
for($i=0;$i<$c;$i++){
if(substr($scan[$i], strlen($scan[$i] - 3), 3) <> "txt"){
$tmp=file('./receivers/'.$scan[$i],FILE_IGNORE_NEW_LINES);
$mails=array_merge($mails,$tmp);
}
}
}
$regexp = '/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$/';
$c=count($mails);
if($c>0){
for($i=0;$i<$c;$i++){
if (preg_match($regexp, $mails[$i]) != 0) {
$message = Swift_Message::newInstance('Wonderful Subject')
->setFrom(array(FROM_EMAIL => FROM_NAME))
->setTo($mails[$i])
->setSubject(file_get_contents('./thailand_subject.txt'))
->setBody(file_get_contents('./thailand_body.txt'))
;
if (!$mailer->send($message))
$not_sent[] = $mails[$i];
}
else
$not_sent[] = $mails[$i];
}
}
if (!isset($not_sent))
$not_sent = array();
$this->logToFile($c, $not_sent);
}
private function logToFile($on, $undelivered) {
$sent=$on-count($undelivered);
$toLog = "Sent " . $sent . "/" . $on . " mails. Not sent: \n" . print_r($undelivered, true);
file_put_contents(LOG_PATH . "MAIL_LOG_" . microtime(), $toLog);
}
}
$p = new sendMail();
?>