我正在尝试使用SwiftMailer开发大规模电子邮件系统(最多一次发送不超过200封电子邮件),但执行速度非常慢。它在发送纯文本电子邮件时有效,但带有附件的电子邮件需要一段时间。
当向163个用户发送包含大约1.5MB附件的电子邮件时,有时我会收到500内部服务器错误,但我会查看我的错误日志,他们不会说任何话(可能是因为我'我在GoDaddy上使用共享Linux主机)。错误出现之前大约需要2分21秒,并且只有114个SMTP中继而不是163. 编辑:我已将此代码添加到我的脚本顶部,但是我仍有同样的问题。
set_time_limit(0);
ini_set('max_execution_time', 0);
ini_set('memory_limit', '256M');
ini_set('mysql.connect_timeout', 500);
ini_set('default_socket_timeout', 500);
出现以下错误:
内部服务器错误
服务器遇到内部错误或配置错误,无法完成您的请求。
请通过webmaster@mitsapp.com与服务器管理员联系,告知他们此错误发生的时间以及您在此错误发生之前执行的操作。
服务器错误日志中可能提供了有关此错误的更多信息。
此外,尝试使用ErrorDocument处理请求时遇到500内部服务器错误错误。
我已经在try / catch块中有代码,但是这并没有向我显示当前的任何错误。我认为问题在于脚本中发生的查询量。如果是这样,我该如何优化它们?如果没有,我怎么能解决这个问题?这是从添加附件开始的代码。:
//Add attachments
if(isset($_FILES['attachments'])) {
$attCount = count($_FILES['attachments']['name']);
$x = 0;
while($x < $attCount) {
if(!isset($_FILES['attachments']['name'])) {
continue;
}
$message->attach(Swift_Attachment::fromPath("uploads/".$_FILES['attachments']['name'][$x]));
$x++;
}
}
//Sender Details
$message->setFrom('no-reply@mitsapp.com');
$message->setSender('no-reply@mitsapp.com');
try {$reply = Swift_Validate::email($_POST['reply']);} catch(Exception $e) {header("Location: ../communicate.php?error=2");}
$message->setReturnPath($_POST['reply']);
$message->setReplyTo($_POST['reply']);
//Send the message
require "connect.php";
$failedRecipients = array();
$numSent = 0;
$sendTo = $_POST['sendTo'];
$emails = array();
foreach ($sendTo as $ID) {
$sql = "SELECT * FROM ".strtolower($_SESSION["mid"])."_current_roster WHERE ID=".$ID;
$result = mysqli_query($conn, $sql) or die("Error sending email. ".mysqli_error($conn));
if(mysqli_num_rows($result) > 0) {
while($row = mysqli_fetch_assoc($result)) {
$emails[] = $row['email'];
}
}
}
foreach($emails as $address) {
$message->setTo($address);
$numSent += $mailer->send($message, $failedRecipients);
}
之后有更多的代码可以正常工作,但是没有内部服务器错误,但是当有错误时就不会运行。