0

私はパスワードのリセットページを作成しました。ここで、使用された電子メールが入力され、PHP が彼にリセットキーを送り返します。メールは機能しますが、Gmail アカウントではプレーン テキストとして送信されます。私はそれを HTML に入れたかったのです。

$subject = "Your password reset for {$config['site_name']}";

$message = "<html><body>";

$message .= "<p>Someone on" . $config['site_domain'] . "tried to reset your password.</p>";
$message .= "<p>Please click below link, if you want to reset your password.</p>";

$message .= "<p><a href='" . $config['site_url'] . "/forgot_password.php?key=" . $key . "'>" . $config['site_url'] . "/forgot_password.php?key=" . $key . "</a></p>";


$message .= "<p>Thank you,<br>The Admin - " . $config['site_url'] . " </p>";

$message .= "</body></html>";

// Create email headers             
// To send HTML mail, the Content-type header must be set
$headers  = "MIME-Version: 1.0 \r\n";
$headers .= "Content-type: text/html; charset=iso-8859-1 \r\n";

// Additional headers
//$headers .= 'To: Mary <mary@example.com>, Kelly <kelly@example.com>' . "\r\n";
$headers .= "From: " . $config['site_name'] . " <noreply@" . $config['site_domain'] . "> \r\n";
$headers .= "X-Sender: <noreply@" . $config['site_domain'] . "> \r\n";
$headers .= "Reply-To: <noreply@" . $config['site_domain'] . "> \r\n";

mail($input['email'],$subject,$message,$headers);

//update pw_reset field into DATABASE
$stmt = $mysqli->prepare("UPDATE members SET pw_reset = ? WHERE email = ?");
$stmt->bind_param("ss", $key, $input['email']);
$stmt->execute();
$stmt->close();     
4

2 に答える 2

1

ヘッダーは次のように構成する必要があります。

$headers = 'From: You <you@example.com>' . "\n"; 
$headers .= 'MIME-Version: 1.0' . "\n"; 
$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n"; 

FromはMIMEとコンテンツの前にあり、コンテンツのみが「\ r \ n」で終わり、他は「\n」であることに注意してください。

ソース(saganwebdesign)

于 2012-07-29T05:54:06.430 に答える
0

この機能を試してみてください。成功すると true を返します

function sendMail($email, $subject, $message)
{
    $supportEmail = 'support@abc.com';
    $from = 'Test Application';
    $msg  = $message;
    $from = str_replace(' ', '-', $from);
    $frm  = $from.' <'.$supportEmail.'>';
    preg_match("<(.*)@(.*\..*)>", $frm, $match);

    ///////////////////Headers/////////////////
    $hdr='';
    $hdr.='MIME-Version: 1.0'."\n";
    $hdr.='content-type: text/html; charset=iso-8859-1'."\n";
    $hdr.="From: {$frm}\n";
    $hdr.="Reply-To: {$frm}\n";
    $hdr.="Message-ID: <".time()."@{$match[2]}>\n";
    $hdr.='X-Mailer: PHP v'.phpversion();
    $x=@mail($email, $subject, $msg, $hdr);
    if($x==0)
    {
        $email=str_replace('@','\@', $email);
        $hdr=str_replace('@','\@',$hdr);
        $x=@mail($email, $subject, $msg, $hdr);
    }
    return $x;
}
于 2012-07-29T09:16:19.173 に答える