這個 PHPMailer 滿好用的,可以用 Gmail 的帳號來寄信。也可以放到 wordpress 資料夾裡和 wordpress 一起運作。
Github: https://github.com/PHPMailer/PHPMailer
取得 source code 的方法有 2種,一個是去github download 另一個是透過指令:
composer require phpmailer/phpmailer
如果沒有 composer 指令,在 RedHat/CentOS 是用 yum install composer 就可以有這個指令。
附註:執行 composer 指令,必需是一般使用者,不能是 root. 一般使用者的檔案如果要開放給其他使用者去存取,請一一檢查所有的 parent folder 權限都有開 read, 這樣子 apache:apache 帳號的人才能讀的到 php source code.
官方的範例1號:
<?php
// Import PHPMailer classes into the global namespace
// These must be at the top of your script, not inside a function
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;
//Load composer's autoloader
require 'vendor/autoload.php';
$mail = new PHPMailer(true); // Passing `true` enables exceptions
try {
//Server settings
$mail->SMTPDebug = 2; // Enable verbose debug output
$mail->isSMTP(); // Set mailer to use SMTP
$mail->Host = 'smtp1.example.com;smtp2.example.com'; // Specify main and backup SMTP servers
$mail->SMTPAuth = true; // Enable SMTP authentication
$mail->Username = '[email protected]'; // SMTP username
$mail->Password = 'secret'; // SMTP password
$mail->SMTPSecure = 'tls'; // Enable TLS encryption, `ssl` also accepted
$mail->Port = 587; // TCP port to connect to
//Recipients
$mail->setFrom('[email protected]', 'Mailer');
$mail->addAddress('[email protected]', 'Joe User'); // Add a recipient
$mail->addAddress('[email protected]'); // Name is optional
$mail->addReplyTo('[email protected]', 'Information');
$mail->addCC('[email protected]');
$mail->addBCC('[email protected]');
//Attachments
$mail->addAttachment('/var/tmp/file.tar.gz'); // Add attachments
$mail->addAttachment('/tmp/image.jpg', 'new.jpg'); // Optional name
//Content
$mail->isHTML(true); // Set email format to HTML
$mail->Subject = 'Here is the subject';
$mail->Body = 'This is the HTML message body <b>in bold!</b>';
$mail->AltBody = 'This is the body in plain text for non-HTML mail clients';
$mail->send();
echo 'Message has been sent';
} catch (Exception $e) {
echo 'Message could not be sent.';
echo 'Mailer Error: ' . $mail->ErrorInfo;
}
You’ll find plenty more to play with in the examples folder.
That’s it. You should now be ready to use PHPMailer!
民間範例 2號:
<?php
include(“PHPMailerAutoload.php”); //匯入PHPMailer類別
$mail= new PHPMailer(); //建立新物件
$mail->IsSMTP(); //設定使用SMTP方式寄信
$mail->SMTPAuth = true; //設定SMTP需要驗證
$mail->Host = “XXX.XXX.XXX.XXX”; //設定SMTP主機
$mail->Port = 25; //設定SMTP埠位,預設為25埠
$mail->CharSet = “big5”; //設定郵件編碼
$mail->Username = “*********”; //設定驗證帳號
$mail->Password = “*********”; //設定驗證密碼
$mail->From = [email protected]; //設定寄件者信箱
$mail->FromName = “測試人員”; //設定寄件者姓名
$mail->Subject = “PHPMailer 測試信件”; //設定郵件標題
$mail->Body = “大家好, 這是一封測試信件! “; //設定郵件內容
$mail->IsHTML(true); //設定郵件內容為HTML
$mail->AddAddress(“[email protected]”, “Max”); //設定收件者郵件及名稱
if(!$mail->Send()) {
echo “Mailer Error: ” . $mail->ErrorInfo;
} else {
echo “Message sent!”;
}
?>
上面範例,直接使用會有錯誤,需要參考上面 1號的範例,使用單引號在 Password 裡就會一切正常。
整合用的範例 3號:
As the others said, you can’t. You can find good examples of HTML-php forms on the web, here’s a very useful link that combines HTML with javascript for validation and php for sending the email.
Please check the full article (includes zip example) in the source: http://www.html-form-guide.com/contact-form/php-email-contact-form.html
HTML:
<form method="post" name="contact_form"
action="contact-form-handler.php">
Your Name:
<input type="text" name="name">
Email Address:
<input type="text" name="email">
Message:
<textarea name="message"></textarea>
<input type="submit" value="Submit">
</form>
JS:
<script language="JavaScript">
var frmvalidator = new Validator("contactform");
frmvalidator.addValidation("name","req","Please provide your name");
frmvalidator.addValidation("email","req","Please provide your email");
frmvalidator.addValidation("email","email",
"Please enter a valid email address");
</script>
PHP:
<?php
$errors = '';
$myemail = '[email protected]';//<-----Put Your email address here.
if(empty($_POST['name']) ||
empty($_POST['email']) ||
empty($_POST['message']))
{
$errors .= "\n Error: all fields are required";
}
$name = $_POST['name'];
$email_address = $_POST['email'];
$message = $_POST['message'];
if (!preg_match(
"/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$/i",
$email_address))
{
$errors .= "\n Error: Invalid email address";
}
if( empty($errors))
{
$to = $myemail;
$email_subject = "Contact form submission: $name";
$email_body = "You have received a new message. ".
" Here are the details:\n Name: $name \n ".
"Email: $email_address\n Message \n $message";
$headers = "From: $myemail\n";
$headers .= "Reply-To: $email_address";
mail($to,$email_subject,$email_body,$headers);
//redirect to the 'thank you' page
header('Location: contact-form-thank-you.html');
}
?>
附註: 所以要將 /etc/php.ini 中的 extension=php_openssl.dll 前面的分號(;)拿掉, 這個我沒有去拿,不知是不是新版本的 php 7.0 已內建支援 openssl.