在php中通过电子邮件发送网页

问题描述 投票:0回答:5

就像在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) 这样的函数吗?

如果不是,我们可以创建任何函数吗?如果可以,请给我一些提示。

谢谢

php email
5个回答
9
投票

以下示例:

<?
    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
    }
?>

4
投票

要添加到 Erik 的答案中,如果您想导入本地(或远程!)文件而不是在代码本身中指定 HTML,您可以这样做:

// fetch locally
$message = file_get_contents('filename.html');

// fetch remotely
$message = file_get_contents('http://example.com/filename.html');

3
投票

使用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();

1
投票

具体方法如下:

$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');

0
投票

PHPMailer

或使用

phpmailer
。更好的改变是让电子邮件最终进入垃圾邮件文件夹。

安装PHPMailer

  1. 安装 Composer 并执行
    composer phpmailer/phpmailer
    安装 PHPMailer 类。
  2. 包括自动加载器
    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 图像。

© www.soinside.com 2019 - 2024. All rights reserved.