就像在ASP中一样,我们有通过电子邮件发送完整网页的功能,这基本上为开发人员节省了大量创建和发送电子邮件的时间
看下面的代码
<%
Set myMail=CreateObject("CDO.Message")
myMail.Subject="Sending email with CDO"
myMail.From="[email protected]"
myMail.To="[email protected]"
myMail.CreateMHTMLBody "mywebpage.html",cdoSuppressNone
myMail.Send
set myMail=nothing
%>
我们知道 CreateMHTMLBody 将从 mywebpage.html 获取数据并将其作为电子邮件正文发送。
我想知道 php 中有像 (CreateMHTMLBody) 这样的函数吗?
如果不是,我们可以创建任何函数吗?如果可以,请给我一些提示。
谢谢
以下示例:
<?
if(($Content = file_get_contents("somefile.html")) === false) {
$Content = "";
}
$Headers = "MIME-Version: 1.0\n";
$Headers .= "Content-type: text/html; charset=iso-8859-1\n";
$Headers .= "From: ".$FromName." <".$FromEmail.">\n";
$Headers .= "Reply-To: ".$ReplyTo."\n";
$Headers .= "X-Sender: <".$FromEmail.">\n";
$Headers .= "X-Mailer: PHP\n";
$Headers .= "X-Priority: 1\n";
$Headers .= "Return-Path: <".$FromEmail.">\n";
if(mail($ToEmail, $Subject, $Content, $Headers) == false) {
//Error
}
?>
要添加到 Erik 的答案中,如果您想导入本地(或远程!)文件而不是在代码本身中指定 HTML,您可以这样做:
// fetch locally
$message = file_get_contents('filename.html');
// fetch remotely
$message = file_get_contents('http://example.com/filename.html');
使用PHP的输出缓冲功能并包含所需的网页。示例:
// Start output buffering
ob_start();
// Get desired webpage
include "webpage.php";
// Store output data in variable for later use
$data = ob_get_contents();
// Clean buffer if you want to continue to output some more code
// in which case it would make sense to use this functionality in the very beginning
// of your page when no other code has been processed yet.
ob_end_clean();
具体方法如下:
$to = '[email protected]';
$subject = 'A test email!';
// 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";
// Put your HTML here
$message = '<html><body>hello world</body></html>';
// Mail it
mail($to, $subject, $message, $headers);
您刚刚发送了 HTML 电子邮件。要加载外部 HTML 文件,请将 $message = '' 替换为:
$message = file_get_contents('the_file.html');
或使用
phpmailer
。更好的改变是让电子邮件不最终进入垃圾邮件文件夹。
composer phpmailer/phpmailer
安装 PHPMailer 类。require "vendor/autoload.php"
$mail = new PHPMailer( true );
try {
//$mail->SMTPDebug = SMTP::DEBUG_SERVER; // Enable verbose debug output
// Server settings
$mail->isSMTP();
$mail->Host = $mail_host;
$mail->Port = $mail_port;
$mail->SMTPAuth = true;
$mail->Username = $mail_username;
$mail->Password = $mail_password;
$mail->SMTPSecure = PHPMailer::ENCRYPTION_SMTPS;
// Recipients
$mail->setFrom( $fromEmail, $fromName );
$mail->addAddress( $to );
// Content
$mail->isHTML( true );
$mail->CharSet = 'UTF-8';
$mail->Subject = $subject;
$mail->AddEmbeddedImage( 'path-to-logo-image', 'logo' );
$mail->Body = $message;
$mail->send();
//LOG->info( "email sent", [ 'to' => $to ] );
} catch ( Exception $e ) {
//LOG->critical( "error sending email", [ 'error' => $e->getMessage() ] );
}
确保设置变量。您可能应该使用
filter_var( trim( $email ), FILTER_SANITIZE_EMAIL );
清理电子邮件地址 $message 应该是包含 html 页面的字符串,其中 <img src='logo' alt='logo'>
可用于包含 png/jpg/gif 图像。