Forms php邮件发送附件can';不能打开
我正在尝试编写一个页面,用户可以在其中发送电子邮件和附件。我想我快到了。现在我收到了电子邮件,但是附件的文件大小不是空的,就是当我试图打开它时,我收到一条消息说它无法打开。感谢您的帮助Forms php邮件发送附件can';不能打开,forms,email-attachments,php,Forms,Email Attachments,Php,我正在尝试编写一个页面,用户可以在其中发送电子邮件和附件。我想我快到了。现在我收到了电子邮件,但是附件的文件大小不是空的,就是当我试图打开它时,我收到一条消息说它无法打开。感谢您的帮助 function valid_email($Email) { //new regex, didn't give me any errors...might be a bit more exact if (ereg('^[_a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)*@[a-z
function valid_email($Email)
{
//new regex, didn't give me any errors...might be a bit more exact
if (ereg('^[_a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)*@[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*\.(([0-9]{1,3})|([a-zA-Z]{2,3})|(aero|coop|info|museum|name))$', $Email) != false)
return true;
else
return false;
}
function sendEmail($email){
return mail ($email['to'], $email['subject'], $email['message'], $email['headers']);
}
if ( strlen($_FILES['Resume_File']['name']) > 0 )
{ // If a file was uploaded, do some processing
$filename = preg_replace('/[^a-zA-Z0-9._-]/', '', $_FILES['Resume_File']['name']);
$filetype = $_FILES["Resume_File"]["type"];
$filesize = $_FILES["Resume_File"]["size"];
$filetemp = $_FILES["Resume_File"]["tmp_name"];
$ext = substr($filename, strpos($filename,'.'), strlen($filename)-1);
if ( !preg_match('/\.(doc|docx|odt|pdf|rtf|txt)/i', $ext) )
{ $errors++;
$errorLog .= "Upload filetype not supported.";
}
else if ( $filesize > 2000000 )
{ $errors++;
$errorLog .= "File size too high, up to 2MB is allowed.";
}
else
{ // Looks like the file is good, send it with the email
//$fp = fopen($filetemp, "rb");
//$file = fread($fp, $filesize);
//$file = chunk_split(base64_encode($file));
//$email['headers'] .= "\n--{$num}\n";
//$email['headers'] .= "Content-Type:{$filetype}";
//$email['headers'] .= "name={$filename}r\n";
//$email['headers'] .= "Content-Disposition: attachment; ";
//$email['headers'] .= "filename={$filename}\n";
//$email['headers'] .= "{$file}";
}
}
// get posted data into local variables
$fname = trim(stripslashes($_POST['fname']));
$lname = trim(stripslashes($_POST['lname']));
$emailAddress = trim(stripslashes($_POST['email']));
$company = trim(stripslashes($_POST['company']));
$information = trim(stripslashes($_POST['information']));
$subject = trim(stripslashes($_POST['subject']));
$title = trim(stripslashes($_POST['title']));
//setup email
$to = 'me@me.com';
$subject = "Resume Submission";
$headers = "From: {$fname} {$lname} <{$emailAddress}>\r\n";
// prepare email body text
$message = "First Name: {$fname} <br>";
$message .= "Last Name: {$lname} <br>";
$message .= "Email: {$emailAddress} <br>";
$message .= "Title: {$title} <br><br>";
$message .= "Comments: {$information}";
if ( $errors == 0 ) {
// Attachment headers
//$to = "myemail@mydomain.com";
//$from = "Website <website@mydomain.com>";
//$subject = "Test Attachment Email";
$separator = md5(time());
// carriage return type (we use a PHP end of line constant)
$eol = PHP_EOL;
// attachment name
//$filename = "document.pdf";
//$pdfdoc is PDF generated by FPDF
$attachment = chunk_split(base64_encode($pdfdoc));
// main header
$headers .= "From: ".$from.$eol;
$headers .= "MIME-Version: 1.0".$eol;
$headers .= "Content-Type: multipart/mixed; boundary=\"".$separator."\"";
// no more headers after this, we start the body! //
$body = "--".$separator.$eol;
$body .= "Content-Transfer-Encoding: 7bit".$eol.$eol;
$body .= "This is a MIME encoded message.".$eol;
// message
$body .= "--".$separator.$eol;
$body .= "Content-Type: text/html; charset=\"iso-8859-1\"".$eol;
$body .= "Content-Transfer-Encoding: 8bit".$eol.$eol;
$body .= $message.$eol;
// attachment
$body .= "--".$separator.$eol;
$body .= "Content-Type: application/octet-stream; name=\"".$filename."\"".$eol;
$body .= "Content-Transfer-Encoding: base64".$eol;
$body .= "Content-Disposition: attachment".$eol.$eol;
$body .= $attachment.$eol;
$body .= "--".$separator."--";
}
//sendEmail($email);
// validation
if ( $errors == 0 ) {
if (valid_email($emailAddress) && $fname != "" && $lname != "") { //if return is true...
mail($to, $subject, $body, $headers);
echo 0; //Success
}else { //otherwise
echo 1; //Error
}
} else {
echo 1; //Error
}
功能有效\u电子邮件($email)
{
//新的正则表达式,没有给我任何错误…可能更准确一点
如果(ereg('.[[U a-zA-Z0-9-]+(\.[U a-zA-Z0-9-]+)*[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*。([0-9]{1,3})([a-zA-Z]{2,3});(aero coop |信息|博物馆|名称$',$Email)!=false)
返回true;
其他的
返回false;
}
函数sendmail($email){
返回邮件($email['to']、$email['subject']、$email['message']、$email['headers']);
}
如果(strlen($_FILES['Resume_File']['name'])>0)
{//如果上载了文件,请执行一些处理
$filename=preg_replace('/[^a-zA-Z0-9.'-]/','',$文件['Resume_文件']['name']);
$filetype=$_文件[“恢复_文件”][“类型”];
$filesize=$_文件[“恢复_文件”][“大小”];
$filetemp=$\u文件[“恢复\u文件”][“tmp\u名称”];
$ext=substr($filename,strpos($filename,“.”),strlen($filename)-1);
如果(!preg_match('/\.(doc | docx | odt | pdf | rtf | txt)/i',$ext))
{$errors++;
$errorLog.=“不支持上载文件类型。”;
}
else if($filesize>2000000)
{$errors++;
$errorLog.=“文件大小太大,最多允许2MB。”;
}
其他的
{//看起来文件很好,请将其与电子邮件一起发送
//$fp=fopen($filetemp,“rb”);
//$file=fread($fp,$filesize);
//$file=chunk_split(base64_encode($file));
//$email['headers']。=“\n--{$num}\n”;
//$email['headers']。=“内容类型:{$filetype}”;
//$email['headers'].=“name={$filename}r\n”;
//$email['headers']。=“内容处置:附件;”;
//$email['headers'].=“filename={$filename}\n”;
//$email['headers'].=“{$file}”;
}
}
//将过帐数据放入局部变量
$fname=trim(斜杠($_POST['fname']);
$lname=修剪(条纹斜杠($_POST['lname']);
$emailAddress=trim(斜杠($_POST['email']);
$company=trim(斜杠($_POST['company']);
$information=修剪(条纹斜杠($_POST['information']);
$subject=trim(斜杠($_POST['subject']);
$title=trim(斜杠($_POST['title']);
//设置电子邮件
$to$me@me.com';
$subject=“简历提交”;
$headers=“From:{$fname}{$lname}\r\n”;
//准备电子邮件正文文本
$message=“名字:{$fname}
”;
$message.=“姓氏:{$lname}
”;
$message.=“电子邮件:{$emailAddress}
”;
$message.=“标题:{$Title}
”;
$message.=“注释:{$information}”;
如果($errors==0){
//附件标题
//$to=”myemail@mydomain.com";
//$from=“网站”;
//$subject=“测试附件电子邮件”;
$separator=md5(time());
//回车类型(我们使用一个PHP行尾常量)
$eol=PHP\u eol;
//附件名称
//$filename=“document.pdf”;
//$pdfdoc是由FPDF生成的PDF
$attachment=chunk_split(base64_encode($pdfdoc));
//主割台
$headers.=“From:”.$From.$eol;
$headers.=“MIME版本:1.0”。$eol;
$headers.=“内容类型:多部分/混合;边界=\”.$separator.\”;
//没有更多的标题之后,我们开始身体//
$body=“-->$分隔符.$eol;
$body.=“内容传输编码:7bit”。$eol.$eol;
$body.=“这是一条MIME编码的消息。”。$eol;
//信息
$body.=“-”$separator.$eol;
$body.=“内容类型:文本/html;字符集=\“iso-8859-1\”。$eol;
$body.=“内容传输编码:8位”。$eol.$eol;
$body.=$message.$eol;
//附件:
$body.=“-”$separator.$eol;
$body.=“内容类型:应用程序/八位字节流;名称=\”“.$filename.\”“.$eol;
$body.=“内容传输编码:base64”。$eol;
$body.=“内容处置:附件”。$eol.$eol;
$body.=$attachment.$eol;
$body.=“--”“分隔符”“--”;
}
//发送电子邮件($电子邮件);
//验证
如果($errors==0){
如果(有效的电子邮件($emailAddress)&&&$fname!=“”&&&$lname!=“”){//如果返回值为true。。。
邮件($to、$subject、$body、$headers);
echo 0;//成功
}否则{//
echo 1;//错误
}
}否则{
echo 1;//错误
}
我正在使用我在这里找到的部分代码
谢谢大家!
//$pdfdoc is PDF generated by FPDF
$attachment = chunk_split(base64_encode($pdfdoc));
$pdfdoc未在页面的任何位置提及。我想这就是问题所在:|PHP的mail()
功能非常差,尤其是在尝试添加附件等高级功能时。它只值得用于最基本的“向站点管理员发送通知电子邮件”类型的电子邮件,即使这样,它也不总是最好的解决方案
我建议放弃使用mail()
函数本身的任何尝试,转而使用一个像样的PHP邮件程序类,比如适当命名的
phpMailer使从PHP创建电子邮件变得非常容易。我拥有你想要的所有功能,包括使添加附件、编写HTML电子邮件等变得非常简单
但phpMailer最好的一点是,它不再需要浪费几十行代码格式化电子邮件标题。所有带有分隔符和mime类型的东西都简化为几行简单的代码。更容易阅读,更容易维护,并且不太可能有bug。你赢了所有回合。离题,但我注意到你使用的是
ereg()
函数。请注意,此函数已被弃用一段时间,并且已从最新版本的PHP中完全删除。您应该再次切换到主题之外的preg_match()
(我看到您在其他地方使用了它),但是如果您对$\u POST
数据使用stripslashes()
,这意味着您正在使用PHP的Magic Quotes功能。请注意,此功能也已弃用,并且