Tôi đang sử dụng PHP trên một trang web và tôi muốn thêm chức năng gửi email.
Tôi đã cài đặt WAMPSERVER.
Làm cách nào để gửi email bằng PHP?
Tôi đang sử dụng PHP trên một trang web và tôi muốn thêm chức năng gửi email.
Tôi đã cài đặt WAMPSERVER.
Làm cách nào để gửi email bằng PHP?
Câu trả lời:
Sử dụng mail()
chức năng của PHP là có thể. Hãy nhớ chức năng thư sẽ không hoạt động trên máy chủ cục bộ.
<?php
$to = 'nobody@example.com';
$subject = 'the subject';
$message = 'hello';
$headers = 'From: webmaster@example.com' . "\r\n" .
'Reply-To: webmaster@example.com' . "\r\n" .
'X-Mailer: PHP/' . phpversion();
mail($to, $subject, $message, $headers);
?>
Tài liệu tham khảo:
Bạn cũng có thể sử dụng lớp PHPMailer tại https://github.com/PHPMailer/PHPMailer .
Nó cho phép bạn sử dụng chức năng thư hoặc sử dụng máy chủ smtp trong suốt. Nó cũng xử lý các email và tệp đính kèm dựa trên HTML để bạn không phải viết bản thực hiện của riêng mình.
Lớp này ổn định và được sử dụng bởi nhiều dự án khác như Drupal, SugarCRM, Yii và Joomla!
Đây là một ví dụ từ trang trên:
<?php
require 'PHPMailerAutoload.php';
$mail = new PHPMailer;
$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 = 'user@example.com'; // SMTP username
$mail->Password = 'secret'; // SMTP password
$mail->SMTPSecure = 'tls'; // Enable encryption, 'ssl' also accepted
$mail->From = 'from@example.com';
$mail->FromName = 'Mailer';
$mail->addAddress('joe@example.net', 'Joe User'); // Add a recipient
$mail->addAddress('ellen@example.com'); // Name is optional
$mail->addReplyTo('info@example.com', 'Information');
$mail->addCC('cc@example.com');
$mail->addBCC('bcc@example.com');
$mail->WordWrap = 50; // Set word wrap to 50 characters
$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 = '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';
if(!$mail->send()) {
echo 'Message could not be sent.';
echo 'Mailer Error: ' . $mail->ErrorInfo;
} else {
echo 'Message has been sent';
}
use PHPMailer\PHPMailer\PHPMailer; use PHPMailer\PHPMailer\Exception; require_once('src/PHPMailer.php'); require_once('src/Exception.php');
Nếu bạn quan tâm đến email định dạng html, hãy đảm bảo vượt qua Content-type: text/html;
trong tiêu đề. Thí dụ:
// multiple recipients
$to = 'aidan@example.com' . ', '; // note the comma
$to .= 'wez@example.com';
// subject
$subject = 'Birthday Reminders for August';
// message
$message = '
<html>
<head>
<title>Birthday Reminders for August</title>
</head>
<body>
<p>Here are the birthdays upcoming in August!</p>
<table>
<tr>
<th>Person</th><th>Day</th><th>Month</th><th>Year</th>
</tr>
<tr>
<td>Joe</td><td>3rd</td><td>August</td><td>1970</td>
</tr>
<tr>
<td>Sally</td><td>17th</td><td>August</td><td>1973</td>
</tr>
</table>
</body>
</html>
';
// To send HTML mail, the Content-type header must be set
$headers = 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
// Additional headers
$headers .= 'To: Mary <mary@example.com>, Kelly <kelly@example.com>' . "\r\n";
$headers .= 'From: Birthday Reminder <birthday@example.com>' . "\r\n";
$headers .= 'Cc: birthdayarchive@example.com' . "\r\n";
$headers .= 'Bcc: birthdaycheck@example.com' . "\r\n";
// Mail it
mail($to, $subject, $message, $headers);
Để biết thêm chi tiết, kiểm tra chức năng thư php .
Cũng xem xét gói thư PEAR Trang Pear Mail
Nó dường như mạnh hơn một chút so với hàm mail () tiêu chuẩn được tích hợp (nếu chức năng tiêu chuẩn không đủ).
Đây là một đoạn trích từ trang này cho thấy nó được sử dụng như thế nào. PEAR Mail gửi () sử dụng
<?php
include('Mail.php');
$recipients = 'joe@example.com';
$headers['From'] = 'richard@example.com';
$headers['To'] = 'joe@example.com';
$headers['Subject'] = 'Test message';
$body = 'Test message';
$smtpinfo["host"] = "smtp.server.com";
$smtpinfo["port"] = "25";
$smtpinfo["auth"] = true;
$smtpinfo["username"] = "smtp_user";
$smtpinfo["password"] = "smtp_password";
// Create the mail object using the Mail::factory method
$mail_object =& Mail::factory("smtp", $smtpinfo);
$mail_object->send($recipients, $headers, $body);
?>
Mail.php
Tệp được tham chiếu trong ví dụ của tôi là một phần của gói Pear Mail. Nếu bạn tải xuống và cài đặt gói Pear Mail, bạn sẽ có thể bao gồm Mail.php
. Nếu bạn nhấp vào liên kết 'Trang thư Pear' ở trên, có một liên kết Tải xuống có hướng dẫn.
Đối với hầu hết các dự án, tôi sử dụng Swift mailer những ngày này. Đó là một cách tiếp cận hướng đối tượng rất linh hoạt và thanh lịch để gửi email, được tạo ra bởi chính những người đã cho chúng tôi khung công tác Symfony phổ biến và công cụ mẫu Twig .
require 'mail/swift_required.php';
$message = Swift_Message::newInstance()
// The subject of your email
->setSubject('Jane Doe sends you a message')
// The from address(es)
->setFrom(array('jane.doe@gmail.com' => 'Jane Doe'))
// The to address(es)
->setTo(array('frank.stevens@gmail.com' => 'Frank Stevens'))
// Here, you put the content of your email
->setBody('<h3>New message</h3><p>Here goes the rest of my message</p>', 'text/html');
if (Swift_Mailer::newInstance(Swift_MailTransport::newInstance())->send($message)) {
echo json_encode([
"status" => "OK",
"message" => 'Your message has been sent!'
], JSON_PRETTY_PRINT);
} else {
echo json_encode([
"status" => "error",
"message" => 'Oops! Something went wrong!'
], JSON_PRETTY_PRINT);
}
Xem tài liệu chính thức để biết thêm thông tin về cách sử dụng Swift mailer.
Swift_MailTransport
khi liên kết của bạn đến tài liệu nói Swift_SendmailTransport
. Điều đó có nghĩa là bạn đang đề cập đến phiên bản cũ hơn của mail swift hay đó là một lỗi đánh máy, hoặc có thể tôi hiểu nhầm điều gì đó? Tôi cần cài đặt phiên bản cũ hơn của swift-mailer vì tôi không có php7 trên máy chủ của mình. Vì vậy, tôi cần phải biết nếu tài liệu cho phiên bản hiện tại sẽ đi với phiên bản cũ hơn của gói. Cảm ơn.
đây là phương pháp rất cơ bản để gửi email văn bản đơn giản bằng chức năng thư.
<?php
$to = 'SomeOtherEmailAddress@Domain.com';
$subject = 'This is subject';
$message = 'This is body of email';
$from = "From: FirstName LastName <SomeEmailAddress@Domain.com>";
mail($to,$subject,$message,$from);
Ví dụ mã đầy đủ ..
Hãy thử một lần ..
<?php
// Multiple recipients
$to = 'johny@example.com, sally@example.com'; // note the comma
// Subject
$subject = 'Birthday Reminders for August';
// Message
$message = '
<html>
<head>
<title>Birthday Reminders for August</title>
</head>
<body>
<p>Here are the birthdays upcoming in August!</p>
<table>
<tr>
<th>Person</th><th>Day</th><th>Month</th><th>Year</th>
</tr>
<tr>
<td>Johny</td><td>10th</td><td>August</td><td>1970</td>
</tr>
<tr>
<td>Sally</td><td>17th</td><td>August</td><td>1973</td>
</tr>
</table>
</body>
</html>
';
// To send HTML mail, the Content-type header must be set
$headers[] = 'MIME-Version: 1.0';
$headers[] = 'Content-type: text/html; charset=iso-8859-1';
// Additional headers
$headers[] = 'To: Mary <mary@example.com>, Kelly <kelly@example.com>';
$headers[] = 'From: Birthday Reminder <birthday@example.com>';
$headers[] = 'Cc: birthdayarchive@example.com';
$headers[] = 'Bcc: birthdaycheck@example.com';
// Mail it
mail($to, $subject, $message, implode("\r\n", $headers));
?>
Đối với độc giả tương lai: Hãy thử điều này nếu các câu trả lời khác không hoạt động (Như trường hợp của tôi):
1.) Tải xuống PHPMailer , mở tệp zip và giải nén thư mục vào thư mục dự án của bạn.
3.) Đổi tên thư mục được trích xuất thành PHPMailer và viết mã bên dưới vào tập lệnh php của bạn (tập lệnh phải nằm ngoài thư mục PHPMailer )
<?php
// PHPMailer classes into the global namespace
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;
// Base files
require 'PHPMailer/src/Exception.php';
require 'PHPMailer/src/PHPMailer.php';
require 'PHPMailer/src/SMTP.php';
// create object of PHPMailer class with boolean parameter which sets/unsets exception.
$mail = new PHPMailer(true);
try {
$mail->isSMTP(); // using SMTP protocol
$mail->Host = 'smtp.gmail.com'; // SMTP host as gmail
$mail->SMTPAuth = true; // enable smtp authentication
$mail->Username = 'sender@gmail.com'; // sender gmail host
$mail->Password = 'password'; // sender gmail host password
$mail->SMTPSecure = 'tls'; // for encrypted connection
$mail->Port = 587; // port for SMTP
$mail->setFrom('sender@gmail.com', "Sender"); // sender's email and name
$mail->addAddress('receiver@gmail.com', "Receiver"); // receiver's email and name
$mail->Subject = 'Test subject';
$mail->Body = 'Test body';
$mail->send();
echo 'Message has been sent';
} catch (Exception $e) { // handle error.
echo 'Message could not be sent. Mailer Error: ', $mail->ErrorInfo;
}
?>
Hàm PHP gốc mail()
không hoạt động đối với tôi. Nó đưa ra thông báo:
503 Máy chủ thư này yêu cầu xác thực khi cố gửi đến một địa chỉ email không cục bộ
Vì vậy, tôi thường sử dụng PHPMailer
gói
Tôi đã tải xuống phiên bản 5.2.23 từ: GitHub .
Tôi vừa chọn 2 tệp và đặt chúng vào thư mục gốc PHP của mình
class.phpmailer.php
class.smtp.php
Trong PHP, tập tin cần phải được thêm vào
require_once('class.smtp.php');
require_once('class.phpmailer.php');
Sau này, nó chỉ là mã:
require_once('class.smtp.php');
require_once('class.phpmailer.php');
...
//----------------------------------------------
// Send an e-mail. Returns true if successful
//
// $to - destination
// $nameto - destination name
// $subject - e-mail subject
// $message - HTML e-mail body
// altmess - text alternative for HTML.
//----------------------------------------------
function sendmail($to,$nameto,$subject,$message,$altmess) {
$from = "yourcontact@yourdomain.com";
$namefrom = "yourname";
$mail = new PHPMailer();
$mail->CharSet = 'UTF-8';
$mail->isSMTP(); // by SMTP
$mail->SMTPAuth = true; // user and password
$mail->Host = "localhost";
$mail->Port = 25;
$mail->Username = $from;
$mail->Password = "yourpassword";
$mail->SMTPSecure = ""; // options: 'ssl', 'tls' , ''
$mail->setFrom($from,$namefrom); // From (origin)
$mail->addCC($from,$namefrom); // There is also addBCC
$mail->Subject = $subject;
$mail->AltBody = $altmess;
$mail->Body = $message;
$mail->isHTML(); // Set HTML type
//$mail->addAttachment("attachment");
$mail->addAddress($to, $nameto);
return $mail->send();
}
Nó hoạt động như một say mê
use PHPMailer\PHPMailer\PHPMailer; use PHPMailer\PHPMailer\Exception; require_once('src/PHPMailer.php'); require_once('src/Exception.php');
Cách cốt lõi để gửi email từ PHP là sử dụng mail()
chức năng tích hợp sẵn của nó , nhưng có một vài SDK sẵn sàng sử dụng có thể dễ dàng tích hợp:
Tái bút: Tôi đang làm việc với Pepipost.
Bạn có thể sử dụng một dịch vụ web mail như Postmark, Sendgrid, v.v.
Sendgrid vs Postmark vs Amazon SES và các nhà cung cấp API / email khác?
Chỉnh sửa: Tôi chỉ sử dụng Google Gmail API ngay bây giờ. Tôi gặp sự cố khi gửi email nhắc nhở đến tổ chức của chủ nhân do các bộ lọc nghiêm ngặt. Nhưng Gmail hoạt động miễn là bạn không spam mọi người.
Đã gửi Email với tập lệnh này
<h2>Test Mail</h2>
<?php
if (!isset($_POST["submit"]))
{
?>
<form method="post" action="<?php echo $_SERVER["PHP_SELF"];?>">
From: <input type="text" name="from"><br>
Subject: <input type="text" name="subject"><br>
Message: <textarea rows="10" cols="40" name="message"></textarea><br>
<input type="submit" name="submit" value="Click To send mail">
</form>
<?php
}
else
{
if (isset($_POST["from"]))
{
$from = $_POST["from"]; // sender
$subject = $_POST["subject"];
$message = $_POST["message"];
$message = wordwrap($message, 70);
mail("Test@example.com",$subject,$message,"From: $from\n");
echo "Thank you for sending an email";
}
}
?>
Khi bạn nhấn nút Gửi email, email sẽ được gửi đến Test@example.com
<?php
include "db_conn.php";//connection file
require "PHPMailerAutoload.php";// it will be in PHPMailer
require "class.smtp.php";// it will be in PHPMailer
require "class.phpmailer.php";// it will be in PHPMailer
$response = array();
$params = json_decode(file_get_contents("php://input"));
if(!empty($params->email_id)){
$email_id = $params->email_id;
$flag=false;
echo "something";
if(!filter_var($email_id, FILTER_VALIDATE_EMAIL))
{
$response['ERROR']='EMAIL address format error';
echo json_encode($response,JSON_UNESCAPED_SLASHES);
return;
}
$sql="SELECT * from sales where email_id ='$email_id' ";
$result = mysqli_query($conn,$sql);
$count = mysqli_num_rows($result);
$to = "demo@gmail.com";
$subject = "DEMO Subject";
$messageBody ="demo message .";
if($count ==0){
$response["valid"] = false;
$response["message"] = "User is not registered yet";
echo json_encode($response);
return;
}
else {
$mail = new PHPMailer();
$mail->IsSMTP();
$mail->SMTPAuth = true; // authentication enabled
$mail->IsHTML(true);
$mail->SMTPSecure = 'ssl';//turn on to send html email
// $mail->Host = "ssl://smtp.zoho.com";
$mail->Host = "p3plcpnl0749.prod.phx3.secureserver.net";//you can use gmail
$mail->Port = 465;
$mail->Username = "demousername@example.com";
$mail->Password = "demopassword";
$mail->SetFrom("demousername@example.com", "Any demo alert");
$mail->Subject = $subject;
$mail->Body = $messageBody;
$mail->AddAddress($to);
echo "yes";
if(!$mail->send()) {
echo "Mailer Error: " . $mail->ErrorInfo;
}
else {
echo "Message has been sent successfully";
}
}
}
else{
$response["valid"] = false;
$response["message"] = "Required field(s) missing";
echo json_encode($response);
}
?>
Các mã trên đang làm việc cho tôi.