作为PHP的相对新手,我对PHPMailer 5.2.0背后的功能实现的简易性印象非常深刻,因为我的网站的联系我页面仍在使用中。但是,我有一个小问题,并且已经搜索了所有的SO,PhpMailer GitHub以及网络的其余部分,以便在过去的几个小时内找到解决方案而且我完全难以说实话,因为没有一个答案看起来很合适我遇到了什么问题。
我在网站的联系表单页面上想要的是允许用户使用我的表单向我发送电子邮件,包括他们的全名,电子邮件地址,他们想要发送的任何附件,以及他们的邮件,然后是我的电子邮件签名。
目前的情况是这样的;当用户填写contact.html页面上的联系表单时,结果将发布到email.php表单,所有内容都会按原样发送到我的电子邮件,然后向发件人电子邮件地址发送自动回复邮件。但是,我没有收到电子邮件中的附件,但如果我使用我可以访问的其他电子邮件帐户,我可以收到初始电子邮件和自动回复,并且它们不会上传到我的网站目录中的uploads文件夹。
我认为,从我到目前为止所读到的内容来看,我错误地设置了2件事,而且我也无法在我的网站目录中找到php.ini文件。
首先是我的网站public_html文件夹的结构,其中包含以下相关文件和文件夹; contact.html,email.php,class.phpmailer.php,class.smtp.php,PHPMailerAutoload.php,以及一个名为uploads的文件夹,其权限设置为允许所有用户类型进行读写。
我假设的第二件事是错误的是PHP代码的以下摘录,取自PHPMailer Git下载中包含的示例(示例没错,只是我使用它),我应该编辑点到uploads文件夹而不是“sys_get_temp_dir()”:
//Attach multiple files one by one
for ($ct = 0; $ct < count($_FILES['userfile']['tmp_name']); $ct++) {
//The line below may be looking for the wrong directory?
$uploadfile = tempnam(sys_get_temp_dir(), sha1($_FILES['userfile']['name'][$ct]));
$filename = $_FILES['userfile']['name'][$ct];
if (move_uploaded_file($_FILES['userfile']['tmp_name'][$ct], $uploadfile)) {
$mail->addAttachment($uploadfile, $filename);
} else {
}
}
当前表格的编码与下面类似,在“contact.html”文件中修剪了所有不必要的样式以便于阅读:
<form method="post" action="email.php" enctype="multipart/form-data">
<div>
<input type="text" id="name" name="name" placeholder="Your Name" required>
</div>
<div>
<input type="email" id="email" name="email" placeholder="Your Email Address" required>
</div>
<div>
<input type="hidden" name="MAX_FILE_SIZE" value="100000">
<input type="file" id="userfile" name="userfile[]" multiple="multiple">
</div>
<div>
<textarea rows="20" id="message" name="message" placeholder="Your message Text..." required></textarea>
</div>
<div class="recaptchaContainer">
<div class="g-recaptcha" data-sitekey="*" data-callback="enableBtn">
</div>
<div>
<button id="sendMsgBtn" type="submit">
Send Message
</button>
<p id="response"></p>
</div>
</form>
它发布的email.php代码,如表单标签中所定义:
<?php
// When we unzipped PHPMailer, it unzipped to
// public_html/PHPMailer_5.2.0
require("PHPMailerAutoload.php");
$mail = new PHPMailer;
// $name, $email, and $message are the data that is being
// posted to this page from our html contact form
$name = $_REQUEST['name'] ;
$email = $_REQUEST['email'] ;
$file = 'images/test.jpg' ;
$message = $_REQUEST['message'] ;
/*Attach multiple files one by one
for ($ct = 0; $ct < count($_FILES['userfile']['tmp_name']); $ct++) {
$uploadfile = tempnam(sys_get_temp_dir(), sha1($_FILES['userfile']['name'][$ct]));
$filename = $_FILES['userfile']['name'][$ct];
if (move_uploaded_file($_FILES['userfile']['tmp_name'][$ct], $uploadfile)) {
$mail->addAttachment($uploadfile, $filename);
} else {
}
}*/
$emailsig = 'Email signature...' ;
// set mailer to use SMTP
//$mail->IsSMTP();
$mail->SMTPAuth = true; // turn on SMTP authentication
$mail->SMTPSecure = "TLS";
$mail->Host = 'smtp.live.com';
$mail->Port = '587';
// Email address & Password:
$mail->Username = "************@**********.com"; // SMTP username
$mail->Password = "******************"; // SMTP password
// $email is the user's email address the specified
// on our contact us page. We set this variable at
// the top of this page with:
// $email = $_REQUEST['email'] ;
$mail->From = $email;
$mail->FromName = $name;
// below we want to set the email address we will be sending our email to.
$mail->AddAddress("****************@***************.com", "***********");
// set word wrap to 50 characters
$mail->WordWrap = 50;
$mail->Subject = "You have received feedback from " . $name . " via your website!";
$mail->AddAttachment( $file, 'test.jpg' );
// $message is the user's message they typed in
// on our contact us page. We set this variable at
// the top of this page with:
// $message = $_REQUEST['message'] ;
$mail->Body = nl2br($message) . $emailsig;
$mail->AltBody = $message;
$mail->IsHTML(true);
if(!$mail->Send())
{
echo "Message could not be sent. <p>";
echo "Mailer Error: " . $mail->ErrorInfo;
exit;
} else {
$mail->ClearAllRecipients();
$mail->ClearAttachments();
$mail->From = "*********@*********.com";
$mail->FromName = "******** - Auto-Response";
$mail->AddAddress($email, $name);
$mail->Subject = "Auto-reply message from ********!";
$message = 'Some auto-reply message text here...';
$mail->Body = nl2br($message) . $emailsig;
$mail->send();
echo "Message has been sent successfully!";
}
?>
我有一种感觉,这是由于我在我的网络服务器上做了(或没做过)而没有指向我目录中的上传文件夹的问题,甚至可能没有将文件拉到我的php文件中原来?我想知道的是一个逐步的说明,用于整理我的代码并在我的网络服务器上进行设置,如果有人可以提供帮助的话吗?
我非常感谢这样一个事实,即我的问题可能会有太多细节,对于那些在这类事情上是专家的人来说可能是一个简单的解决方法,我只是希望你能掌握所有信息。让这个更轻松一点。