我一直在尝试使用jquery可联系插件(在google上找到!)中的mail.php文件在我的网站上使用。虽然提供的脚本非常简单,但我遇到了将其与Host的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);
?>
我尝试过使用谷歌的建议并玩了好几个小时。这是迄今为止基于我对php的nil理解的最新版本。 -__-(基于此:http://blog.geek4support.com/php-mail-script-with-smtp-authentication-how-to-send-mails-by-php-mail-script-using-smtp-authetication/)
<?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 :-(。只有带有SMTP的PearMail。他们建议调整上面列出的代码并将我现有的代码与它结合使用。确切地说,我在网上发布之前一直试图做的事情回到原点1,有什么想法吗?
评论,建议,任何事情都会非常感激! : - )
答案 0 :(得分:9)
要发送邮件,请尝试PHPMailer,对其进行测试,每个人都使用它,它就可以了。 它还有很多功能和配置选项。
最新版本为this one,与使用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);
答案 1 :(得分:0)
这是我的测试脚本,用于解决禁用的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";
}
?>