php 通过 PHPMailer 添加附件
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/17776126/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Add attachment through PHPMailer
提问by Ayush Khemka
I have this following piece of code of PHPMailer. The problem is, that the file uploads to the server successfully but the attachment is not sent in the mail. The attachment code seems right to the best of my knowledge. Please review the code and let me know where have I gone wrong.
我有以下一段 PHPMailer 代码。问题是,文件成功上传到服务器,但邮件中没有发送附件。据我所知,附件代码似乎是正确的。请检查代码,让我知道我哪里出错了。
Form
形式
<form name="contactform" method="post" action="send1.php" enctype="multipart/form-data">
<table width="100%" border="0">
<tr>
<td id="ta">
<label for="title">Title *</label>
</td>
<td id="ta">
<select name="title">
<option value="0">Title</option>
<option value="1">Mr.</option>
<option value="2">Ms.</option>
<option value="3">Mrs.</option>
</select></td></tr><tr><td id="ta">
<label for="first_name">First Name *</label>
</td>
<td id="ta">
<input type="text" name="first_name" maxlength="50" size="30" required="required">
</td>
</tr>
<tr>
<td id="ta">
<label for="last_name">Last Name *</label>
</td>
<td id="ta">
<input type="text" name="last_name" maxlength="50" size="30" required="required">
</td>
</tr>
<tr>
<td id="ta">
<label for="email">Email Address *</label>
</td>
<td id="ta">
<input type="text" name="email" maxlength="80" size="30" required="required">
</td>
</tr>
<tr>
<td id="ta">
<label for="telephone">Telephone Number *</label>
</td>
<td id="ta">
<input type="text" name="telephone" maxlength="30" size="30" required="required">
</td>
</tr>
<tr>
<td id="ta">
<label for="comments">Details</label>
</td>
<td id="ta">
<textarea name="comments" maxlength="100000" cols="25" rows="6"></textarea>
</td>
</tr>
<tr>
<td id="ta">
<label for="file">Or upload a file (only word, excel or pdf)</label>
</td>
<td id="ta">
<input type="file" name="file">
</td>
</tr>
<tr>
<td colspan="2" style="text-align:center" id="ta">
<input type="submit" value="Submit">
</td>
</tr>
</table>
</form>
send1.php
发送1.php
<?php
require('PHPMailer/class.phpmailer.php');
if(isset($_POST['email'])) {
// EDIT THE 2 LINES BELOW AS REQUIRED
//$email_to = "hidden";
//$email_subject = "Request for Portfolio check up from ".$first_name." ".$last_name;
$title = array('Title', 'Mr.', 'Ms.', 'Mrs.');
$selected_key = $_POST['title'];
$selected_val = $title[$_POST['title']];
$first_name = $_POST['first_name']; // required
$last_name = $_POST['last_name']; // required
$email_from = $_POST['email']; // required
$telephone = $_POST['telephone']; // not required
$comments = $_POST['comments']; // required
if(($selected_key==0))
echo "<script> alert('Please enter your title')</script>";
function clean_string($string) {
$bad = array("content-type","bcc:","to:","cc:","href");
return str_replace($bad,"",$string);
}
$email_message = "";
$email_message .="Title: ".$selected_val."\n";
$email_message .= "First Name: ".clean_string($first_name)."\n";
$email_message .= "Last Name: ".clean_string($last_name)."\n";
$email_message .= "Email: ".clean_string($email_from)."\n";
$email_message .= "Telephone: ".clean_string($telephone)."\n";
$email_message .= "Comments: ".clean_string($comments)."\n";
$allowedExts = array("doc", "docx", "xls", "xlsx", "pdf");
$temp = explode(".", $_FILES["file"]["name"]);
$extension = end($temp);
if ((($_FILES["file"]["type"] == "application/pdf")
|| ($_FILES["file"]["type"] == "application/msword")
|| ($_FILES["file"]["type"] == "application/excel")
|| ($_FILES["file"]["type"] == "application/vnd.ms-excel")
|| ($_FILES["file"]["type"] == "application/x-excel")
|| ($_FILES["file"]["type"] == "application/x-msexcel")
|| ($_FILES["file"]["type"] == "application/vnd.openxmlformats-officedocument.wordprocessingml.document")
|| ($_FILES["file"]["type"] == "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"))
&& in_array($extension, $allowedExts))
{
if ($_FILES["file"]["error"] > 0)
{
echo "<script>alert('Error: " . $_FILES["file"]["error"] ."')</script>";
}
else
{
$d='upload/';
$de=$d . basename($_FILES['file']['name']);
move_uploaded_file($_FILES["file"]["tmp_name"], $de);
$fileName = $_FILES['file']['name'];
$filePath = $_FILES['file']['tmp_name'];
//add only if the file is an upload
}
}
else
{
echo "<script>alert('Invalid file')</script>";
}
// create email headers
$headers = 'From: '.$email_from."\r\n".
'Reply-To: '.$email_from."\r\n" .
'X-Mailer: PHP/' . phpversion();
//Create a new PHPMailer instance
$mail = new PHPMailer();
//Tell PHPMailer to use SMTP
$mail->IsSMTP();
//Enable SMTP debugging
// 0 = off (for production use)
// 1 = client messages
// 2 = client and server messages
$mail->SMTPDebug = 0;
//Ask for HTML-friendly debug output
$mail->Debugoutput = 'html';
//Set the hostname of the mail server
$mail->Host = "hidden";
//Set the SMTP port number - likely to be 25, 465 or 587
$mail->Port = 25;
//Whether to use SMTP authentication
$mail->SMTPAuth = true;
//Username to use for SMTP authentication
$mail->Username = "hidden";
//Password to use for SMTP authentication
$mail->Password = "hidden";
//Set who the message is to be sent from
$mail->SetFrom($email_from, $first_name.' '.$last_name);
//Set an alternative reply-to address
//$mail->AddReplyTo('[email protected]','First Last');
//Set who the message is to be sent to
$mail->AddAddress('hidden', 'hidden');
//Set the subject line
$mail->Subject = 'Request for Profile Check up';
//Read an HTML message body from an external file, convert referenced images to embedded, convert HTML into a basic plain-text alternative body
$mail->MsgHTML($email_message);
//Replace the plain text body with one created manually
$mail->AltBody = 'This is a plain-text message body';
//Attach an image file
//$mail->AddAttachment($file);
$mail->AddAttachment($_FILES['file']['tmp_name'], $_FILES['file']['name']);
//Send the message, check for errors
if(!$mail->Send()) {
echo "<script>alert('Mailer Error: " . $mail->ErrorInfo."')</script>";
} else {
echo "<script>alert('Your request has been submitted. We will contact you soon.')</script>";
Header('Location: main.php');
}
}
?>
EDITThe mail sends successfully with all the details too. Just that the attachment won't send.
编辑邮件也成功发送了所有详细信息。只是附件不会发送。
EDIT 2: SOLVEDChanged $mail->MsgHTML
to $mail->Body
and it worked!
编辑 2:已解决更改$mail->MsgHTML
为$mail->Body
并且有效!