Bagaimana cara mengirim email menggunakan PHP?


Jawaban:


443

Menggunakan mail()fungsi PHP itu mungkin. Ingat fungsi email tidak akan berfungsi di server lokal.

<?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);
?> 

Referensi:


6
bagaimana jika saya perlu mengirim email dari server lokal. maksud saya adakah cara untuk mengakses server mailing terdekat dan membuatnya mengirim email untuk saya. maksud saya, saya dapat menemukan alamat server surat yahoo dan kemudian saya menggunakan server itu untuk keperluan surat ... apakah ini mungkin?
user590849

19
Anda perlu mengkonfigurasi SMTP di server lokal Anda. Lihatlah posting serupa ini, stackoverflow.com/questions/4652566/php-mail-setup-in-xampp
Muthu Kumaran

Halo @MuthuKumaran jika itu masuk spam apakah ada solusi yang baik untuk menyelesaikannya, harap jawab.
Muhammad Ashikuzzaman

@MuhammadAshikuzzaman Anda tidak dapat menyelesaikan masalah spam di PHP. Silakan ajukan pertanyaan baru di situs StackExchange yang sesuai jika ini masih relevan.
Uli Köhler

Bagaimana cara memastikan atau memverifikasi apakah ini berfungsi di server lokal saya? Jika tidak mungkin metode untuk melakukannya, silakan menyarankan beberapa alternatif. Terima kasih.
abhishah901

121

Anda juga bisa menggunakan kelas PHPMailer di https://github.com/PHPMailer/PHPMailer .

Ini memungkinkan Anda untuk menggunakan fungsi surat atau menggunakan server smtp secara transparan. Ini juga menangani email dan lampiran berbasis HTML sehingga Anda tidak perlu menulis implementasi Anda sendiri.

Kelasnya stabil dan digunakan oleh banyak proyek lain seperti Drupal, SugarCRM, Yii, dan Joomla!

Ini adalah contoh dari halaman di atas:

<?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';
}

4
Jika tidak menggunakan komposer:use PHPMailer\PHPMailer\PHPMailer; use PHPMailer\PHPMailer\Exception; require_once('src/PHPMailer.php'); require_once('src/Exception.php');
Wtower

43

Jika Anda tertarik dengan email berformat html, pastikan untuk meneruskannya Content-type: text/html;di tajuk. Contoh:

// 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);

Untuk lebih jelasnya, periksa fungsi surat php .


Halo, saya lelah dengan kode ini, saya menambahkan 3 penerima, satu Hotmail, satu Gmail, dan satu email situs web saya. Saya menerima semua kecuali di Hotmail. Apakah Anda punya ide mengapa itu tidak berfungsi untuk Hotmail?
antf

Silakan periksa folder spam dalam kasus itu.
Sumoanand

Saya sudah melakukannya, itu tidak ada dalam spam, itu tidak menjangkau sama sekali. Saya membaca sedikit lebih banyak tentang subjek dan tampaknya Hotmail memerlukan header khusus atau tidak mengizinkan email untuk melewati server mereka ... Saya masih tidak menemukan solusinya.
antf

Saya memecahkan masalah saya dengan menggunakan PHPMailer dan memasukkan data akun email saya dengan SSL di objek email PHPMailer.
antf

Bagaimana jika pesan tersebut memiliki konten HTML dan php?

14

Lihat juga paket surat PEAR, Pear Mail Page

Tampaknya sedikit lebih kuat daripada fungsi mail () standar yang ada di dalamnya (jika fungsi standar tidak memadai).

Berikut adalah kutipan dari halaman ini yang menunjukkan bagaimana penggunaannya. PEAR Mail send () use

<?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);
?> 

tolong berikan tautan pengunduhan dari tautan mail.php Anda yang digunakan dan semua file terkait lainnya dalam suatu folder. Terima kasih
Muhammad Ashikuzzaman

1
@ Ashik Mail.phpFile yang direferensikan dalam contoh saya adalah bagian dari paket Pear Mail. Jika Anda mengunduh dan menginstal paket Pear Mail, Anda dapat memasukkannya Mail.php. Jika Anda mengklik tautan 'Pear Mail Page' di atas, ada tautan Unduh dengan instruksi.
Kevin S

12

Untuk sebagian besar proyek, saya menggunakan mailer Swift hari ini. Ini adalah pendekatan berorientasi objek yang sangat fleksibel dan elegan untuk mengirim email, dibuat oleh orang yang sama yang memberi kami kerangka kerja Symfony dan mesin templat ranting yang populer .


Penggunaan dasar:

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);
}

Lihat dokumentasi resmi untuk info lebih lanjut tentang cara menggunakan Swift mailer.


Hai. Anda mengatakan Swift_MailTransportketika tautan Anda ke dokumentasi mengatakan Swift_SendmailTransport. Apakah itu berarti Anda merujuk ke versi swift mailer yang lebih lama atau itu adalah kesalahan ketik, atau mungkin saya salah mengerti sesuatu? Saya perlu menginstal versi swift-mailer yang lebih lama karena saya tidak memiliki php7 di server saya. Jadi saya perlu tahu apakah dokumentasi untuk versi saat ini akan masuk dengan versi paket yang lebih lama. Terima kasih.
Yevgeniy Afanasyev

1
@YevgeniyAfanasyev: Jawaban saya adalah cara yang benar untuk melakukan sesuatu 2 tahun yang lalu, tetapi Swift_MailTransport telah ditinggalkan sejak Swiftmailer v5.4.5 . Bagaimanapun, jika Anda tidak dapat menggunakan PHP 7 untuk proyek Anda, Anda harus menggunakan Swiftmailer v5.4.9. Itu versi stabil terakhir yang masih mendukung PHP 5. Untuk dokumentasi versi v5.4.9 atau detail perbedaan antara v5.4.9 dan v6.0.2, Anda mungkin ingin menghubungi Fabien Potencier atau mengajukan masalah pada Github .
John Slegers

Terima kasih banyak. Jadi tidak ada dokumentasi yang tersedia untuk versi yang lebih lama, ketika distribusi tersedia. Senang mendengarnya.
Yevgeniy Afanasyev

7

ini adalah metode yang sangat mendasar untuk mengirim email teks biasa menggunakan fungsi email.

<?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);

7

Coba ini:

<?php
$to = "somebody@example.com";
$subject = "My subject";
$txt = "Hello world!";
$headers = "From: webmaster@example.com" . "\r\n" .
"CC: somebodyelse@example.com";

mail($to,$subject,$txt,$headers);
?>

5

Contoh kode lengkap ..

Coba sekali ..

<?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));
?>

5

Untuk pembaca masa depan: Coba ini jika jawaban lain tidak berfungsi (Seperti halnya saya):

1.) Unduh PHPMailer , buka file zip dan ekstrak folder ke direktori proyek Anda.

3.) Ubah nama direktori yang diekstraksi menjadi PHPMailer dan tulis kode di bawah ini di dalam skrip php Anda (skrip harus berada di luar folder 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;
}
?>

5

Fungsi PHP asli mail()tidak berfungsi untuk saya. Itu mengeluarkan pesan:

503 Server email ini memerlukan otentikasi ketika mencoba mengirim ke alamat email non-lokal

Jadi, saya biasanya menggunakan PHPMailerpaket

Saya telah mengunduh versi 5.2.23 dari: GitHub .

Saya baru saja mengambil 2 file dan meletakkannya di root PHP sumber saya

class.phpmailer.php
class.smtp.php

Dalam PHP, file perlu ditambahkan

require_once('class.smtp.php');
require_once('class.phpmailer.php');

Setelah ini, ini hanya kode:

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();
}

Itu bekerja seperti pesona


2
Terima kasih atas jawaban Anda. Anda memiliki saran yang sama dengan @norteo yang ditunjukkan dalam jawabannya. Harap diingat bahwa v5.2 sudah usang dan tidak menerima pembaruan keamanan. Untuk v6 Anda dapat secara langsung membutuhkan:use PHPMailer\PHPMailer\PHPMailer; use PHPMailer\PHPMailer\Exception; require_once('src/PHPMailer.php'); require_once('src/Exception.php');
Wtower

4

Cara inti untuk mengirim email dari PHP adalah dengan menggunakan mail()fungsi bawaannya, tetapi ada beberapa SDK siap pakai yang dapat memudahkan integrasi:

  1. Swiftmailer
  2. PHPMailer
  3. Pepipost (berfungsi lebih dari HTTP maka masalah blok port SMTP dapat dihindari)
  4. Sendmail

PS Saya bekerja dengan Pepipost.


3
Anda dipekerjakan dengan Pepipost dan Anda menempatkan Pepipost di no.3. +1
GeneCode

2
@GeneCode, Jika ada sesuatu yang terbaik, maka itu adalah. Tidak masalah apakah Anda bekerja dengan mereka atau tidak :) Swiftmailer dan PHPMailer, jelas merupakan salah satu alat open source terbaik untuk mengirim email (karenanya saya menyimpannya dalam 1 dan 2). Tetapi, pada saat yang sama, mereka memiliki batasan dan penghalang tertentu yang kami coba atasi di Pepipost SDK kami.
Dibya Sahoo


1

Mengirim Email dengan skrip ini

<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";
    }
  }
?>

Setelah Anda menekan tombol Kirim email, email akan dikirim ke Test@example.com


1
<?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);
}


?>

Kode di atas berfungsi untuk saya.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.