使用 php 发送电子邮件时防止图像阻塞

Prevent Image blocking while sending emails using php

我试过这段代码。但电子邮件中未显示图片。我需要在不被遮挡的情况下显示图像。

require("class.phpmailer.php")
$mail = new PHPMailer();
$mail->IsSMTP();
$mail->Host = "smtp.sendgrid.net";
$mail->SMTPAuth = true;
$mail->Username = 'username';
$mail->Password = 'password';
$mail->From="ex@gmail.com";
$mail->FromName="Email Image";
$mail->Sender="eg@gmail.com";
$mail->AddReplyTo("xe@gmail.com", "Reply");
$mail->AddAddress("exe@gmail.com");
$mail->Subject = "Test";
$mail->IsHTML(true);
$mail->AddEmbeddedImage('https://ci4.googleusercontent.com/proxy/D7vQqu3U7j2qWYtvzCLHodLRvMHt1Fq0F5s12lEp2YQc-RPwytgpqhRLhqzIZglky59F4-A-OtVXlmglO2CoS7CrkZk=s0-d-e1-ft#http://litebreeze.com/images/profile_small.jpg',profile_pic,'profile_small.jpg', "base64", "application/octet-stream");
$mail->Body = "This is a test picture: <img src=\"cid:profile_pic\" /></p>";
$mail->AltBody="This is text only alternative body.";
if(!$mail->Send())
{
   echo "Error sending: " . $mail->ErrorInfo;
}
else
{
    echo "Letter is sent";
}

你在这里做错了几件事。

  • addEmbeddedImage 希望您提供文件的本地路径,而不是 遥控器 URL.
  • 您故意设置了错误的 MIME 类型
  • 你还没有引用你的cid。
  • 我认为没有充分的理由从 google 的代理缓存中拉取图像 - 直接从源中拉取即可。

所有这些的修复:

$mail->AddStringEmbeddedImage(file_get_contents('http://litebreeze.com/images/profile_small.jpg'),'profile_pic','profile_small.jpg');

您没有使用加密 - 设置 $mail->SMTPSecure = 'tls';$mail->Port = 587;

您还在使用旧版本的 PHPMailer,并且您的代码基于一个过时的示例。去 get the latest.