我们有一个网站,其表单在提交时会执行以下操作(通过以下代码);
在插入MYSQL之前向我自己发送一封测试邮件,这样我就知道php邮件正在运行,它在我的所有测试中都会这样做
然后将表单中的所有数据插入到MYSQL中(这总是有效)
通过PHP Mailer发送另一封电子邮件,其中包含他们提交的所有信息。我希望它以纯文本形式出现(这只占大约80%的时间)。
正在发生的事情是,有时候人们提交并且它会做所有事情,但有时它只会执行第1步和第2步。所以有时候,某些事情似乎在某个地方出现了问题。我觉得它可能是某些标点符号的问题,但不确定。就像$ copy字段一样,人们可以输入他们想要的任何内容。不确定是否存在某些可能会破坏第二封电子邮件流程的标点符号。
注意:每次有人提交时,都会将它们带到request-success.php页面。但它并不总是从第3步发送电子邮件。
如果有人看到了改进的地方,或者那些错误的事情,请分享。这让我疯了。
<?php
session_start();
include_once("config.php");
include_once("includes/functions.php");
require 'phpmailer/PHPMailerAutoload.php';
//database configuration & connection (hiding for privacy purposes, but the database connections work fine so not relevant
if ($_POST['submit']) {
$type=$_POST['type'];
$category= substr($type, 0, strpos($type, ' -'));
$category= strtolower($category);
$category= ucfirst($category);
$need = substr($type, strpos($type, "-") + 1);
$subject="REQUEST for " . $type;
$fullname= $_SESSION['google_data']['name'];
$fromemail=$_SESSION['google_data']['email'];
$brands=$_POST['brand'];
$size=$_POST['size'];
if ($size == "") {
$size="n/a";
}
$bleed=$_POST['bleed'];
if ($bleed =="no") {
$bleedsize="n/a";
} else {
$bleedsize=$_POST['bleedsize'];
}
$filetype=$_POST['filetype'];
if ($filetype=="") {
$filetype="n/a";
}
$footerurl=$_POST['footer-url'];
if ($footerurl=="") {
$footerurl="n/a";
}
$footerphone=$_POST['footer-phone'];
if ($footerphone=="") {
$footerphone="n/a";
}
$copy=mysqli_real_escape_string($con,$_POST['copy']);
$copyforemail=$_POST['copy'];
$approved=$_POST['approved'];
$seo=$_POST['seo'];
$proofread=$_POST['proofread'];
$info=mysqli_real_escape_string($con,$_POST['info']);
$infoforemail=$_POST['info'];
$priority=$_POST['priority'];
$requestdate= date('Y-m-d');
$duedate = date('Y-m-d', strtotime(str_replace('-', '/', $_POST['duedate'])));
if ($duedate =="1969-12-31") {
$duedate="0000-00-00";
}
$timinginfo=mysqli_real_escape_string($con,$_POST['timinginfo']);
$timinginfoforemail=$_POST['timinginfo'];
$communication=mysqli_real_escape_string($con,$_POST['communication']);
$communicationforemail=$_POST['communication'];
//TEST EMAIL BEFORE INSERTING
$mail = new PHPMailer;
//$mail->SMTPDebug = 3; // Enable verbose debug output
/*
$mail->isSMTP(); // Set mailer to use SMTP
$mail->Host = 'smtp.gmail.com'; // Specify main and backup SMTP servers
$mail->SMTPAuth = true; // Enable SMTP authentication
$mail->Username = ''; // SMTP username
$mail->Password = ''; // SMTP password
$mail->SMTPSecure = 'tls'; // Enable TLS encryption, `ssl` also accepted
$mail->Port = 587; // TCP port to connect to
*/
$mail->setFrom($fromemail, $fullname);
$mail->addAddress('myemail@myemail.com', 'my name'); // Add recipients
$mail->addReplyTo('myemail@myemail.com', 'my name');
/*$mail->addCC('cc@example.com');
$mail->addBCC('bcc@example.com');
$mail->addAttachment('/var/tmp/file.tar.gz'); // Add attachments
$mail->addAttachment('/tmp/image.jpg', 'new.jpg'); // Optional name*/
$mail->isHTML(true); // Set email format to HTML
$mail->Subject = "Request coming for Creative Team";
$mail->Body = "Request coming";
$mail->AltBody = "Request coming";
if(!$mail->send()) {
echo 'Message could not be sent.';
echo 'Mailer Error: ' . $mail->ErrorInfo;
} else {
//continue to insert
}
$sql = "INSERT INTO requests (firstname, lastname, email, picture, category, type, brand, size, bleed, bleedsize, filetype, footerurl, footerphone, copy, approved, proofread, seo, info, priority, requestdate, duedate, timinginfo, communication ) VALUES ('" . $_SESSION['google_data']['given_name'] . "', '" . $_SESSION['google_data']['family_name'] . "','" . $_SESSION['google_data']['email'] . "', '" . $_SESSION['google_data']['picture'] . "', '$category', '$need', '$brands', '$size', '$bleed', '$bleedsize', '$filetype', '$footerurl', '$footerphone', '$copy', '$approved', '$proofread', '$seo', '$info', '$priority', '$requestdate', '$duedate', '$timinginfo', '$communication')";
$insertinfo = mysqli_query($con, $sql);
if (!$insertinfo) {
die("Database query failed: " . mysqli_error($con));
} else {
//Success, continue to email...
}
$plaintextversion= "
$type
BRAND: $brands
SPECS
SIZE: $size
BLEED: $bleed
BLEED SIZE: $bleedsize
FILE TYPE: $filetype
FOOTER URL: $footerurl
FOOTER PHONE: $footerphone
COPY: $copyforemail
COPY APPROVED? $approved
PROOFREAD? $proofread
ADDITIONAL INFO: $infoforemail
TIMING
PRIORITY: $priority
REQUEST DATE: $requestdate
DESIRED DUE DATE: $duedate
TIMING INFO: $timinginfoforemail
COMMUNICATION
ADDITIONAL PEOPLE TO INCLUDE: $communicationforemail";
} else {
header("Location:index.php");
}
$mail = new PHPMailer;
//$mail->SMTPDebug = 3; // Enable verbose debug output
/*
$mail->isSMTP(); // Set mailer to use SMTP
$mail->Host = 'smtp.gmail.com'; // Specify main and backup SMTP servers
$mail->SMTPAuth = true; // Enable SMTP authentication
$mail->Username = ''; // SMTP username
$mail->Password = ''; // SMTP password
$mail->SMTPSecure = 'tls'; // Enable TLS encryption, `ssl` also accepted
$mail->Port = 587; // TCP port to connect to
*/
$mail->setFrom($fromemail, $fullname);
$mail->addAddress('someone@someone.com', 'someone'); // Add recipients
$mail->addReplyTo('myemail@myemail.com', 'my name');
/*$mail->addCC('cc@example.com');
$mail->addBCC('bcc@example.com');
$mail->addAttachment('/var/tmp/file.tar.gz'); // Add attachments
$mail->addAttachment('/tmp/image.jpg', 'new.jpg'); // Optional name*/
$mail->isHTML(false); // Set email format to plain text since that is what Salesforce needs
$mail->Subject = $subject;
$mail->Body = $plaintextversion;
$mail->AltBody = $plaintextversion;
if(!$mail->send()) {
echo 'Message could not be sent.';
echo 'Mailer Error: ' . $mail->ErrorInfo;
} else {
header("Location:request-success.php");
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<html>
<head>
<meta charset="utf-8">
<meta name="robots" content="noindex, nofollow">
<title>Untitled Document</title>
</head>
<body>
</body>
</html>
答案 0 :(得分:1)
如果您只想要纯文字,请致电isHTML(false)
并仅设置Body
- 请勿在{{1}}中添加任何内容。
无需每次都从头开始 - 您可以重新使用相同的PHPMailer实例,只需在第二次发送之前更改属性。
您使用提交者地址作为发件人地址 - 这是伪造的,并且会导致SPF失败的退款,因此请将您的地址放在From和他们的回复中。
正如Jon所说,验证,清理和转义任何进入SQL的内容 - 很可能你的失败来自包含AltBody
的提交,这会破坏你的SQL。