Я пытаюсь отправить электронное письмо с нашего веб-сайта, размещенного на BlueHost, с приложением. Мы выяснили, что по состоянию на август 2015 года наш оригинальный сценарий больше не отправлял электронные письма на нашу электронную почту.
Перемотка вперед, мы пытаемся исправить эту проблему, но нам не везет. Первоначально в нашем коде использовался старый подход mail (). Ниже приведена попытка исправить этот подход (который не возвращает ошибок PHP / log):
<?php
if(!isset($_POST["email"]) && !isset($_POST["name"]))
{
echo "Error: Form Not Submitted.\n Name and email are mandatory!Please Click the back button to return to the website.\n";
//Set Variables
$company = $_POST["company"];
$address = $_POST["address"];
$phone = $_POST["phone"];
$name = $_POST["name"];
$position = $_POST["position"];
$visitor_email = $_POST["email"];
$message = $_POST["message"];
$submitVar = $_POST["submit"];
echo "$company, $address, $phone, $name, $position, $visitor_email, $message \r\n";
}
else{
//Set Variables
$company = $_POST["company"];
$address = $_POST["address"];
$phone = $_POST["phone"];
$name = $_POST["name"];
$position = $_POST["position"];
$visitor_email = $_POST["email"];
$message = $_POST["message"];
echo "$company, $address, $phone, $name, $position, $visitor_email, $message \r\n";
if(IsInjected($visitor_email))
{
echo "Bad email value!";
exit;
}
//***Lay out Message***//
$to = "example@att.net";
$email_from = $visitor_email;
$email_subject = "Website Form Submission from $company";
$email_body = "Dear Email Target,\n\n $message\n\nSincerely,\n\n$name\n$position\n\n$company\n$address\n$phone";
//***Attatch the file***//
$filename = $_FILES['attachment1']['tmp_name'];
$filetype = $_FILES['attachment1']['tmp_type'];
$filesize = $_FILES['attachment1']['tmp_size']; // get size of the file for size validation
if($filesize > 0){
$handle = fopen($filename, "r");
$content = fread($handle, $filesize);
fclose($handle);
$attachment = chunk_split(base64_encode($content));
}
//*** Establish Boundary ***//
$boundary = md5(date('r', time()));
//***Start Header***//
$headers = "MIME-Version: 1.0\r\n";
$headers = "X-Mailer: PHP/" . phpversion()."\r\n";
$headers .= "From: ".$name." <".$email_from.">\r\n";
$headers .= "To: ".$email."\r\n";
$headers .= "Subject: $email_subject\r\n";
$headers .= "Reply-To: ".$visitor_email."\r\n";
$headers .= "Content-Type: multipart/mixed";
$headers .= "boundary = \"".$boundary."\"\r\n\r\n";
//***Message Section***//
$body = "--$boundary\r\n";
$body .= "Content-Type: text/plain; charset=ISO-8859-1\r\n";
$body .= "Content-Transfer-Encoding: base7\r\n\r\n";
$body .= $email_body;
//***Attachment Section***//;
if($filesize > 0){
$body .= "--$boundary\r\n";
$body .="Content-Type:".$filetype."; name=\"".$filename."\"\r\n";
$body .="Content-Disposition: attachment; filename=".$filename."\r\n";
$body .="Content-Transfer-Encoding: base64\r\n";
$body .="X-Attachment-Id: ".rand(1000, 99999)."\r\n\r\n";
$body .= $attachment."\r\n\r\n"; // Attaching the encoded file with email
}
//***End Email***///
$body .= "--$boundary--";
//Send the email!
$test = mail($to, $email_subject, $body, $headers);
if($test){
echo "TRUE";
//done. redirect to thank-you page.
header("Location: ./Sales_Quotes.html");
echo '<h5 class="contentHeader simple">Form Submitted!</h5>';
/* Redirect browser */
exit();/*Good Practice*/
} else {
die("Error: PHP mail() failure!\r\n"
.$to."\r\n"
.$email_subject."\r\n"
.$body."\r\n"
.$headers."\r\n");
}
}
// Function to validate against any email injection attempts
function IsInjected($str)
{
$injections = array('(\n+)',
'(\r+)',
'(\t+)',
'(%0A+)',
'(%0D+)',
'(%08+)',
'(%09+)'
);
$inject = join('|', $injections);
$inject = "/$inject/i";
if(preg_match($inject,$str))
{
return true;
}
else
{
return false;
}
}
?>
И локальный хост с Debian 10.2, и BlueHost сообщают мне, что функция mail () завершается сбоем, когда я ее вызываю. Где я go ошибся? Поскольку после 2 дней работы я ни к чему не привел, так как все, кажется, хотят, чтобы я использовал PHPMailer, я также создал второй сценарий с подходом PHPMailer, и он также не работает точно так же (без ошибок log / php, сообщая мне, что вызов не состоялся):
<?php
require_once './PHPMailer.php';
require_once './Exception.php';
use PHPMailer\PHPMailer\PHPMailer;
if(!isset($_POST["email"]) && !isset($_POST["name"]))
{
echo "Error: Form Not Submitted.\n Name and email are mandatory!Please Click the back button to return to the website.\n";
//Set Variables
$company = $_POST["company"];
$address = $_POST["address"];
$phone = $_POST["phone"];
$name = $_POST["name"];
$position = $_POST["position"];
$visitor_email = $_POST["email"];
$message = $_POST["message"];
$submitVar = $_POST["submit"];
echo "$company, $address, $phone, $name, $position, $visitor_email, $message \r\n";
}
else{
//***Set Variables***//
$company = $_POST["company"];
$address = $_POST["address"];
$phone = $_POST["phone"];
$name = $_POST["name"];
$position = $_POST["position"];
$visitor_email = $_POST["email"];
$message = $_POST["message"];
echo "$company, $address, $phone, $name, $position, $visitor_email, $message \r\n";
if(IsInjected($visitor_email))
{
echo "Bad email value!";
exit;
}
//***Lay out Message***//
$to = "example@att.net";
$email_from = $visitor_email;
$email_subject = "Website Form Submission from $company";
$email_body = "Dear Target,\n\n $message\n\nSincerely,\n\n$name\n$position\n\n$company\n$address\n$phone";
//***Upload the file***//
$filename = $_FILES['attachment1']['tmp_name'];
$filetype = $_FILES['attachment1']['type'];
$filesize = $_FILES['attachment1']['size']; // get size of the file for size validation
if($filesize > 0){
$attachment = tempnam(sys_get_temp_dir(), hash('sha256', $_FILES['attachment1']['name']));
if (!(move_uploaded_file($_FILES['attachment1']['tmp_name'], $uploadfile))){
echo "Failed to Upload File Properly.";
}
}
//***Create the PHPMailer Message***//:
$mail = new PHPMailer(true);
$mail -> setFrom($email_from,$name);
$mail -> To = "sietins@sietins.com";
$mail -> addAddress("example@att.net", "Mr. Example");
$mail -> Subject = $email_subject;
$mail -> Body = $email_body;
if($filesize > 0){
//***Attach the file***//
$mail ->addAttachment($uploadfile,$filename);
}
//***Send the email!***//
if(!$mail->send()){
echo "TRUE";
//done. redirect to thank-you page.
header("Location: ./Sales_Quotes.html");
echo '<h5 class="contentHeader simple">Form Submitted!</h5>';
/* Redirect browser */
exit();/*Good Practice*/
} else {
die("Error: PHP mail() failure!\r\n"
.$to."\r\n"
.$email_subject."\r\n"
.$email_body."\r\n");
}
}
// Function to validate against any email injection attempts
function IsInjected($str)
{
$injections = array('(\n+)',
'(\r+)',
'(\t+)',
'(%0A+)',
'(%0D+)',
'(%08+)',
'(%09+)'
);
$inject = join('|', $injections);
$inject = "/$inject/i";
if(preg_match($inject,$str))
{
return true;
}
else
{
return false;
}
}
?>
Существует ли какое-либо простое решение / исправление вышеизложенного, отвечающее следующим требованиям?
1010
Нет SMTP . Местный хост предпочитал. Быстрая / простая настройка
Должен поддерживать
опциональное вложение от пользователя
Должен быть жизнеспособным для BlueHost.
Обратите внимание, что это для малого бизнеса в обрабатывающей промышленности. Я в своем уме и уже потратил слишком много времени на это. Любая помощь будет принята с благодарностью.