如何在PHP中发送带有附件的邮件

时间:2019-04-29 07:41:46

标签: php email

我想用PHP发送带有附件的邮件。我从一个网站尝试了这个例子:

//recipient
$to = 'my email adress';

//sender
$from = 'test@example.com';
$fromName = 'Moduleingabe';

//email subject
$subject = 'test email'; 

//attachment file path
$file = $dateiname;

//email body content
$htmlContent = '<h1>Test email</h1>
   <p>This email has sent from PHP script with attachment.</p>';

//header for sender info
$headers = "From: $fromName"." <".$from.">";

//boundary 
$semi_rand = md5(time()); 
$mime_boundary = "==Multipart_Boundary_x{$semi_rand}x"; 

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

//multipart boundary 
$message = "--{$mime_boundary}\n" . "Content-Type: text/html; charset=\"UTF-8\"\n" .
"Content-Transfer-Encoding: 7bit\n\n" . $htmlContent . "\n\n"; 

//preparing attachment
if(!empty($file) > 0){
    if(is_file($file)){
        $message .= "--{$mime_boundary}\n";
        $fp =    @fopen($file,"rb");
        $data =  @fread($fp,filesize($file));

        @fclose($fp);
        $data = chunk_split(base64_encode($data));
        $message .= "Content-Type: application/octet-stream; name=\"".basename($file)."\"\n" . 
        "Content-Description: ".basename($file)."\n" .
        "Content-Disposition: attachment;\n" . " 
  filename=\"".basename($file)."\"; size=".filesize($file).";\n" . 
        "Content-Transfer-Encoding: base64\n\n" . $data . "\n\n";
    }
}
$message .= "--{$mime_boundary}--";
$returnpath = "-f" . $from;

//send email
$mail = @mail($to, $subject, $message, $headers, $returnpath); 

//email sending status
echo $mail?"<h1>Mail sent.</h1>":"<h1>Mail sending failed.</h1>";

这给了我Mail sending failed.的结果,我也只尝试了mail()函数,没有附件,它给了我false

我尝试使用$from所使用的真实邮件地址,但这给了我相同的结果,尽管我记得当我第一次尝试该功能时可以使用任何示例邮件。

1 个答案:

答案 0 :(得分:0)

在我的服务器上尝试您的代码。

https://files.olivierlam.fr/test/mail.php?to=YOUREMAIL&from=EMAILSENDER

对我有用。我已经收到了电子邮件。并显示邮件已发送。