一見すると、多くのユーザーがこの質問を重複としてマークしていることはわかっていますが、10 を超える質問を読んだ後、満足のいく回答が得られませんでした。ほとんどすべての質問に、「それについてできることはあまりありません。」よくわかりません」、「確実なショットのトリックはありません」などです。それが私がこの質問を書いている理由です。これは非常に一般化された質問であり、すべての PHP 開発者が少なくとも一度は直面していると思います。質問は..
私はプロジェクト管理アプリケーションに取り組んでおり、アクションが発生するとすぐにメールを送信する代わりに、タスクが作成されたとき、またはバグメールに関する誰かのコメントが関連するユーザーに送信されたときに、phpmailer を使用してメールを送信しています。「通知」テーブルを作成しました。ここで実際にすべてのメール データと cron スクリプトを保存してから、すべてのメールを送信します。これが私の cron スクリプトの一部です。
$query = "select * from notifications where 1 ";
$projects = $obj_basic->get_query_data($query);
if(!empty($projects))
{
foreach($projects as $data)
{
$message = html_entity_decode($data['content'], ENT_QUOTES);
list($ton, $email) = get_name_email($data['to']);
if(!empty($email))
{
$query = "select send_notification from users where email='$email' AND send_notification !='1' ";
$users = $obj_basic->get_query_data($query);
if(!empty($users))
{
$deleteQuery = "delete from notifications where id ='".$data['id']."'";
$obj_basic->run_query($deleteQuery, 'DELETE');
continue;
}
$comment_id = $data['reference_id'];
$attribute = $data['attribute'];
$mail = new PHPMailer();
list($fromName, $fromEmail) = get_name_email($data['from']);
if(!empty($comment_id) && $attribute == 'comment')
{
$fromEmail = 'comment@changewebaddress.com';
}
$mail->SetFrom($fromEmail, $fromName);
$mail->AddReplyTo($fromEmail, $fromName);
$mail->AddAddress($email, $ton);
$mail->BouncedTo = $fromEmail;
$mail->IsHTML(true);
$mail->Subject = $data['subject'];
$mail->Body = $message;
$MessageID = "<".md5($comment_id.'_'.$email).'@changewebaddress.com>';
$mail->MessageID= $MessageID;
if($mail->Send()) {
if(!empty($comment_id) && $attribute == 'comment')
{
$query = "SELECT message_id FROM `project_comments` WHERE `id`='$comment_id'; ";
$project_comments = $obj_basic->get_query_data($query, 'SELECT');
if(!empty($project_comments))
{
$project_comments[0]['message_id'] = html_entity_decode(trim($project_comments[0]['message_id'], ","));
$query = "UPDATE `project_comments` SET `message_id`=CONCAT_WS(',', '".mysql_escape_string($project_comments[0]['message_id'])."', '".mysql_escape_string(html_entity_decode($MessageID))."') WHERE `id`='$comment_id'; ";
$obj_basic->run_query($query, 'UPDATE');
}
}
$deleteQuery = "delete from notifications where id ='".$data['id']."'";
$obj_basic->run_query($deleteQuery, 'DELETE');
}
}
}
}
私がテストしたところによると、phpmailerを使用しているので、必要なヘッダーを設定し、ヘッダーに「Return-Path:」と「Reply-To:」も設定しているため、すべてがうまく見えます。
この問題に関する正確な解決策はありますか