Я пытаюсь использовать файл mail.php из подключаемого jQuery плагина (найденного в google!) Для использования на моем веб-сайте. Хотя предоставленный сценарий довольно прост, я столкнулся с проблемами с интеграцией с требованиями SMTP моего хоста. Вот оригинальный скрипт без аутентификации SMTP:
<?php // Assign contact info $name = stripcslashes($_POST['name']); $emailAddr = stripcslashes($_POST['email']); $issue = stripcslashes($_POST['issue']); $comment = stripcslashes($_POST['message']); $subject = stripcslashes($_POST['subject']); // Set headers $headers = 'MIME-Version: 1.0' . "\r\n"; $headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n"; // Format message $contactMessage = "<div> <p><strong>Name:</strong> $name <br /> <strong>E-mail:</strong> $emailAddr <br /> <strong>Issue:</strong> $issue </p> <p><strong>Message:</strong> $comment </p> <p><strong>Sending IP:</strong> $_SERVER[REMOTE_ADDR]<br /> <strong>Sent via:</strong> $_SERVER[HTTP_HOST]</p> </div>"; // Send and check the message status $response = (mail('mymail@mymail.com', $subject, $contactMessage, $headers) ) ? "success" : "failure" ; $output = json_encode(array("response" => $response)); header('content-type: application/json; charset=utf-8'); echo($output); ?>
Я пробовал использовать предложения от Google и часами играл с ним. Вот последняя версия, основанная на моем понимании php до сих пор. -__- (Исходя из этого: http://blog.geek4support.com/php-mail-script-with-smtp-authentication-how-to-send-mails-by-php-mail-script-using-smtp- аутотерапия / )
<?php require_once "Mail.php"; // Assign contact info $name = stripcslashes($_POST['name']); $emailAddr = stripcslashes($_POST['email']); $issue = stripcslashes($_POST['issue']); $comment = stripcslashes($_POST['message']); $subject = stripcslashes($_POST['subject']); $host = "mail.mywebsite.com"; $username = "mywebsitemail@mywebsiteaddress.com"; $password = "mymailpassword"; // Set headers $headers = 'MIME-Version: 1.0' . "\r\n"; $headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n"; // Format message $contactMessage = "<div> <p><strong>Name:</strong> $name <br /> <strong>E-mail:</strong> $emailAddr <br /> <strong>Issue:</strong> $issue </p> <p><strong>Message:</strong> $comment </p> <p><strong>Sending IP:</strong> $_SERVER[REMOTE_ADDR]<br /> <strong>Sent via:</strong> $_SERVER[HTTP_HOST]</p> </div>"; $smtp = Mail::factory('smtp', array ('host' => $host, 'auth' => true, 'username' => $username, 'password' => $password)); $response = ($smtp->send('mymail@mymail.com', $subject, $contactMessage, $headers)) ? "success": "failure"; $output = json_encode(array("response" => $response)); header('content-type: application/json; charset=utf-8'); echo($output); ?>
У меня на самом деле проблема. Мой хост не поддерживает PHPMailer 🙁 Только PearMail с SMTP. Они предложили настроить код, указанный выше, и включить мой существующий с ним. Именно то, что я пытался сделать, прежде чем публиковать этот онлайн. 1, любые идеи?
Комментарии, предложения, что-нибудь было бы высоко оценено! 🙂
Для отправки писем, попробуйте PHPMailer , он протестирован, каждый использует его, и он просто работает. Он также имеет множество функций и вариантов конфигурации.
Последняя версия – это та же , что и для отправки писем с использованием SMTP с помощью PHPMailer, это все, что вам нужно
// Data received from POST request $name = stripcslashes($_POST['name']); $emailAddr = stripcslashes($_POST['email']); $issue = stripcslashes($_POST['issue']); $comment = stripcslashes($_POST['message']); $subject = stripcslashes($_POST['subject']); // Send mail $mail = new PHPMailer(); $mail->IsSMTP(); // telling the class to use SMTP // SMTP Configuration $mail->SMTPAuth = true; // enable SMTP authentication $mail->Host = "myhost"; // SMTP server $mail->Username = "yourusername@gmail.com"; $mail->Password = "yourpassword"; //$mail->Port = 465; // optional if you don't want to use the default $mail->From = "my@email.com"; $mail->FromName = "My Name"; $mail->Subject = $subject; $mail->AltBody = "To view the message, please use an HTML compatible email viewer!"; // optional, comment out and test $mail->MsgHTML($issue . "<br /><br />" . $comment); // Add as many as you want $mail->AddAddress($emailAddr, $name); // If you want to attach a file, relative path to it //$mail->AddAttachment("images/phpmailer.gif"); // attachment $response= NULL; if(!$mail->Send()) { $response = "Mailer Error: " . $mail->ErrorInfo; } else { $response = "Message sent!"; } $output = json_encode(array("response" => $response)); header('content-type: application/json; charset=utf-8'); echo($output);
Это мой тестовый скрипт для работы с отключенной функцией PHP mail (). Он использует PearMail. Операторы печати для тестирования в браузере, вы можете удалить их.
<?php /* * Script to send an email as the PHP mail() function is disabled. * The hosting company requires SMTP authentication etc. * need to install the pear mail package in the cPanel * * Use the support@myserver.com as the sending/from email * (or maybe the welcome one?) * * Sunday, 11 october 2015 * G O'Rilla * * */ function pearMail( $e_mail, $subject, $content ) { /* // To ignore the Strict Standards (which are non fatal) change your error // reporting level in the php.ini file or better, inline with error_reporting() */ error_reporting(E_ERROR | E_PARSE); # To use installed modules (cPanel - PHP Extensions and Applications Package Installer) # Add “/home/myaccount/php” to the include path. To do this, add the following code to your script: ini_set("include_path", '/home/myaccount/php:' . ini_get("include_path") ); require_once 'Mail.php'; #Server host only allows SMTP authentication /* * Use below setting for SMTP Authentication. * -- * SMTP Host : myserver.com * SMTP User : Use domain email Address [xyz@myserver.com] * SMTP Password : Use domain email password. * SMTP Port : 25 */ //print "Start Script <br>"; $params = array(); $params["host"] = “myserver.com"; # - The server to connect. Default is localhost - use your domain name. $params["port"] = 25; # - The port to connect. Default is 25. // Error: return fron mailer: Failed to set sender: welcome@theappflap.com //[SMTP: Invalid response code received from server (code: 550, response: // Access denied - Invalid HELO name (See RFC2821 4.1.1.1))] // sever requires authentication so TRUE $params["auth"] = TRUE; # - Whether or not to use SMTP authentication. Default is FALSE. $params["username"] = "support@myserver.com"; #- The username to use for SMTP authentication. $params["password"] = “********”; #- The password to use for SMTP authentication. print_r ( $params ); //Other parameters assuming default values will do #$params["localhost"] - The value to give when sending EHLO or HELO. Default is localhost #$params["timeout"] - The SMTP connection timeout. Default is NULL (no timeout). #$params["verp"] - Whether to use VERP or not. Default is FALSE. #$params["debug"] - Whether to enable SMTP debug mode or not. Default is FALSE. # Mail internally uses Net_SMTP::setDebug . #$params["persist"] - Indicates whether or not the SMTP connection should persist over multiple calls to the send() method. #$params["pipelining"] - Indicates whether or not the SMTP commands pipelining should be used. $rc = $mailer = & Mail::factory( "smtp", $params ); # creates a mailer instance if ( $rc == NULL ) { print "<br>Failed to create mail instance <br>"; } else { print "<br>mail instance created <br>"; } $recipients = $email; //'support@myserver.com'; $headers['From'] = 'welcome@myserver.com'; $headers['To'] = $email; //'support@myserver.com'; // Input param $headers['Subject'] = $subject; //'TAF: Test message'; // Input param $body = $content; //'This is a test using PEAR mailer'; // Input param print ( "recipients: " . $e_mail . " subject: " . $subject . " content: " . $content . "<br>"); $rc = $mailer->send( $recipients, $headers, $body ); print ( "return from mailer; " . $rc ); //print "<br>End Script"; } ?>