php - 无法读取 PHP 邮件附件
问题描述
我是 PHP 新手,我需要创建一个表单,要求用户输入几个字段并上传他/她的简历。当他/她提交表格时,他/她的提交应该通过电子邮件发送给我,并附上他/她的简历作为电子邮件的附件。我已经使用 PHP 使用 php 邮件功能发送电子邮件。一切正常,除了文件附件无法读取。请参阅随附的屏幕截图。
https://imgur.com/a/UnUOyDR
上传的文件也是 odt 格式。我需要用户上传所有类型的简历格式。
我发布了代码的基本部分。如果我错了请纠正我
if ($_POST['submit_x']) {
$cand_name = trim($_POST['cand_name']);
$appl_email = $_POST['email'];
$target_dir = "/home/test/public_html/new/job/hr/Resume/";
$file = $_FILES['my_file']['name']; // Resume-Test.odt
$path = pathinfo($file);
$ext = $path['extension']; // odt
$temp_name = $_FILES['my_file']['tmp_name']; // /tmp/phpqkLeuL
$path_filename_ext = $target_dir.$file.".".$ext;
move_uploaded_file($temp_name,$path_filename_ext);
$mailto = 'robert.k1254@gmail.com';
$subject = 'Subject';
$message = 'My message';
$content = file_get_contents($path_filename_ext);
$content = chunk_split(base64_encode($content));
// a random hash will be necessary to send mixed content
$separator = md5(time());
// carriage return type (RFC)
$eol = "\r\n";
// main header (multipart mandatory)
$headers = "From: name <test@test.com>" . $eol;
$headers .= "MIME-Version: 1.0" . $eol;
$headers .= "Content-Type: multipart/mixed; boundary=\"" . $separator . "\"" . $eol;
$headers .= "Content-Transfer-Encoding: 7bit" . $eol;
$headers .= "This is a MIME encoded message." . $eol;
// message
$body = "--" . $separator . $eol;
$body .= "Content-Type: text/plain; charset=\"iso-8859-1\"" . $eol;
$body .= "Content-Transfer-Encoding: 8bit" . $eol;
$body .= $message . $eol;
// attachment
$body .= "--" . $separator . $eol;
$body .= "Content-Type: application/octet-stream; name=\"" . $file . "\"" . $eol;
$body .= "Content-Transfer-Encoding: base64" . $eol;
$body .= "Content-Disposition: attachment" . $eol;
$body .= $content . $eol;
$body .= "--" . $separator . "--";
//SEND Mail
if (mail($mailto, $subject, $body, $headers)) {
echo "mail send ... OK"; // or use booleans here
} else {
echo "mail send ... ERROR!";
print_r( error_get_last() );
}
}
<input type="file" name="my_file" /><br /><br />
解决方案
如果你使用 PHP 的 mail() 函数,很难找到错误。从这里下载 PHPMailer 脚本:http://github.com/PHPMailer/PHPMailer并包含主脚本文件。
<?php
$email = new PHPMailer();
$email->From = 'From mail id';
$email->FromName = 'from name';
$email->Subject = 'Subject of message';
$email->Body = $bodytext;//body of the subject
$email->AddAddress( 'receiver email id' );
$file_path = 'path of the file you want to attach';
$email->AddAttachment( $file_path , 'filename' );
return $email->Send();
?>
推荐阅读
- javascript - 如何使用 CefSharp 铬浏览器从 windows.external 执行 C#(WPF) 中的函数?
- python - 创建 django 模型时,它会发布数据,但不会将其保存在数据库中
- android - 登录 AWS 用户池后,会话在三星设备中立即过期
- r - 如何在 case_when 语句中检测多个正则表达式
- typescript - 删除在 ngOnInit() 上订阅服务创建的空行
- sql-server - 如何在 SSRS 报告中验证 FromDate 和 Todate
- ecmascript-6 - 意外的令牌 { 使用 Webpack 4 和 @babel/preset-env
- rest - 针对非 REST 操作的 REST API 设计
- c# - 在身份验证 ASP.CORE 期间重定向到多个页面
- visual-studio - 如何在 Visual Studio 生成的发布配置文件中设置环境