【问题标题】:Attachment not being sent in php? [closed]附件没有在php中发送? [关闭]
【发布时间】:2013-04-13 23:13:34
【问题描述】:

这个将html文件作为附件发送的代码工作正常。 但是在下一个代码 sn-p 中,当我将附件更改为图像时,它没有被发送。为什么会这样?

<?php
$file_path = "file.html"; // server path where file is placed
$file_path_type = "text/html"; // File Type
$file_path_name = "newfilename.html"; // this file name will be used at reciever end 

$from = "xyz@gmail.com"; // E-mail address of sender
$to = "abc@gmail.com"; // E-mail address of reciever
$subject = "Please check the Attachment."; // Subject of email
$message = "This is the message body.&lt;br&gt;&lt;br&gt;Thank You!&lt;br&gt;&lt;a href='http://7tech.co.in'&gt;7tech.co.in Team&lt;/a&gt;"; 

$headers = "From: ".$from; 

$file = fopen($file_path,'rb');
$data = fread($file,filesize($file_path));
fclose($file); 

$rand = md5(time());
$mime_boundary = "==Multipart_Boundary_x{$rand}x"; 

$headers .= "\nMIME-Version: 1.0\n" .
"Content-Type: multipart/mixed;\n" .
" boundary=\"{$mime_boundary}\""; 

$message .= "This is a multi-part message in MIME format.\n\n" .
"--{$mime_boundary}\n" .
"Content-Type:text/html; charset=\"iso-8859-1\"\n" .
"Content-Transfer-Encoding: 7bit\n\n" .
$message .= "\n\n"; 

$data = chunk_split(base64_encode($data)); 

$message .= "--{$mime_boundary}\n" .
"Content-Type: {$file_path_type};\n" .
" name=\"{$file_path_name}\"\n" .
"Content-Disposition: attachment;\n" .
" filename=\"{$file_path_name}\"\n" .
"Content-Transfer-Encoding: base64\n\n" .
$data .= "\n\n" .
"--{$mime_boundary}--\n";  

if(@mail($to, $subject, $message, $headers)) {
echo "File send!";

} else {
echo 'Failed';
}
?>

现在,当我将附件更改为图片(即 screenshot.png)时,它无法发送消息。

<?php
    $file_path = "screenshot.png"; // server path where file is placed
    $file_path_type = "image/png"; // File Type
    $file_path_name = "screenshot.png"; // this file name will be used at reciever end 

    $from = "xyz@gmail.com"; // E-mail address of sender
    $to = "abc@gmail.com"; // E-mail address of reciever
    $subject = "Please check the Attachment."; // Subject of email
    $message = "This is the message body.&lt;br&gt;&lt;br&gt;Thank You!&lt;br&gt;&lt;a href='http://7tech.co.in'&gt;7tech.co.in Team&lt;/a&gt;"; 

    $headers = "From: ".$from; 

    $file = fopen($file_path,'rb');
    $data = fread($file,filesize($file_path));
    fclose($file); 

    $rand = md5(time());
    $mime_boundary = "==Multipart_Boundary_x{$rand}x"; 

    $headers .= "\nMIME-Version: 1.0\n" .
    "Content-Type: multipart/mixed;\n" .
    " boundary=\"{$mime_boundary}\""; 

    $message .= "This is a multi-part message in MIME format.\n\n" .
    "--{$mime_boundary}\n" .
    "Content-Type:text/html; charset=\"iso-8859-1\"\n" .
    "Content-Transfer-Encoding: 7bit\n\n" .
    $message .= "\n\n"; 

    $data = chunk_split(base64_encode($data)); 

    $message .= "--{$mime_boundary}\n" .
    "Content-Type: {$file_path_type};\n" .
    " name=\"{$file_path_name}\"\n" .
    "Content-Disposition: attachment;\n" .
    " filename=\"{$file_path_name}\"\n" .
    "Content-Transfer-Encoding: base64\n\n" .
    $data .= "\n\n" .
    "--{$mime_boundary}--\n";  

    if(@mail($to, $subject, $message, $headers)) {
    echo "File send!";

    } else {
    echo 'Failed';
    }
    ?>

你们能指出错误吗?我也尝试在 1-2 处更改内容类型,但没有成功。我错过了什么吗?

【问题讨论】:

  • 您收到什么错误?
  • 一个问题,虽然可能不相关,但接近尾声:$data .= "\n\n" [...] 不应该有等号,而是:$data . "\n\n" [...]
  • @fredrik 我收到消息失败!
  • 不,那是您打印的内容。 mail 说什么?
  • 真的没有理由自己编写这些东西。 SwiftMailer 几乎是 PHP 邮件的黄金标准。

标签: php


【解决方案1】:

咨询PhpMailer vs. SwiftMailer?

您当然可以继续使用繁琐的手动邮件构建代码。但是请不要将额外的调试工作卸载给其他人。你的选择,你的问题。

如果您有点聪明,请使用现有解决方案之一,而不是创可贴代码。

【讨论】:

  • 同意。有一些易于使用、经过良好测试的库可以为您完成所有这些工作。
  • 好吧,别告诉我这是不可能的。请告诉我错误。我希望这样学习。我以后可能会使用phpmailer或swift!但是这段代码有什么错误!
  • @user2280276 当然可以。但是您可以先自己筛选hundreds of duplicates we have on this。你还没有这样做。这可能没什么帮助,因为它们都过于本地化,就像你的问题一样。
猜你喜欢
  • 1970-01-01
  • 2013-06-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多