Cara menggunakan smtp php

$from = "[email protected]";
$headers = "From:" . $from;
echo mail ("[email protected]" ,"testmailfunction" , "Oj",$headers);

Saya kesulitan mengirim email dalam PHP. Saya mendapatkan kesalahan: SMTP server response: 530 SMTP authentication is required.

Saya mendapat kesan bahwa Anda dapat mengirim email tanpa SMTP untuk memverifikasi. Saya tahu bahwa email ini mungkin akan difilter, tetapi itu tidak masalah sekarang.

[mail function]
; For Win32 only.
; http://php.net/smtp
SMTP = localhost
; http://php.net/smtp-port
smtp_port = 25

; For Win32 only.
; http://php.net/sendmail-from
sendmail_from = [email protected]

Ini adalah pengaturan dalam file php.ini. Bagaimana cara mengatur SMTP? Apakah ada server SMTP yang tidak memerlukan verifikasi atau haruskah saya membuat server sendiri?

Ketika Anda mengirim e-mail melalui server yang memerlukan SMTP Auth, Anda benar-benar perlu menentukannya, dan mengatur Host, nama pengguna dan kata sandi (dan mungkin port jika bukan yang default - 25).

Sebagai contoh, saya biasanya menggunakan PHPMailer dengan pengaturan yang serupa dengan yang ini:

$mail = new PHPMailer();
$mail->IsSMTP();
$mail->CharSet = 'UTF-8';

$mail->Host       = "mail.example.com"; // SMTP server example
$mail->SMTPDebug  = 0;                     // enables SMTP debug information (for testing)
$mail->SMTPAuth   = true;                  // enable SMTP authentication
$mail->Port       = 25;                    // set the SMTP port for the GMAIL server
$mail->Username   = "username"; // SMTP account username example
$mail->Password   = "password";        // SMTP account password example

Anda dapat menemukan lebih banyak tentang PHPMailer di sini: https://github.com/PHPMailer/PHPMailer

Untuk pengguna Unix, mail () sebenarnya menggunakan Sendmail perintah untuk mengirim email. Alih-alih memodifikasi aplikasi, Anda dapat mengubah lingkungan. msmtp adalah klien SMTP dengan sintaksis CLI Sendmail yang kompatibel yang berarti dapat digunakan sebagai pengganti Sendmail. Itu hanya membutuhkan perubahan kecil untuk php.ini Anda.

sendmail_path = "/usr/bin/msmtp -C /path/to/your/config -t"

Kemudian bahkan fungsi mail () yang rendah dapat bekerja dengan kebaikan SMTP. Ini sangat berguna jika Anda mencoba menghubungkan aplikasi yang ada ke layanan email seperti sendgrid atau mandrill tanpa memodifikasi aplikasi.

";
?>

ATAU

BACA HARI

Inilah cara untuk melakukannya dengan PHP PEAR

// Pear Mail Library
require_once "Mail.php";

$from = '<[email protected]>'; //change this to your email address
$to = '<[email protected]>'; // change to address
$subject = 'Insert subject here'; // subject of mail
$body = "Hello world! this is the content of the email"; //content of mail

$headers = array(
    'From' => $from,
    'To' => $to,
    'Subject' => $subject
);

$smtp = Mail::factory('smtp', array(
        'Host' => 'ssl://smtp.gmail.com',
        'port' => '465',
        'auth' => true,
        'username' => '[email protected]', //your gmail account
        'password' => 'snip' // your password
    ));

// Send the mail
$mail = $smtp->send($to, $headers, $body);

//check mail sent or not
if (PEAR::isError($mail)) {
    echo '

'.$mail->getMessage().'

'; } else { echo '

Message successfully sent!

'; }

Jika Anda menggunakan SMTP Gmail, ingatlah untuk mengaktifkan SMTP di akun Gmail Anda, di bawah pengaturan 

Masalahnya adalah fungsi PHP mail() memiliki fungsi yang sangat terbatas. Ada beberapa cara untuk mengirim email dari PHP.

  1. mail() menggunakan server SMTP di sistem Anda. Setidaknya ada dua server yang dapat Anda gunakan di Windows: hMailServer dan xmail . Saya menghabiskan beberapa jam mengkonfigurasi dan membangunkan mereka. Yang pertama lebih sederhana menurut saya. Saat ini, hMailServer bekerja pada Windows 7 x64.
  2. mail() menggunakan server SMTP pada mesin jarak jauh atau virtual dengan Linux. Tentu saja, layanan email nyata seperti Gmail tidak memungkinkan koneksi langsung tanpa kredensial atau kunci. Anda dapat mengatur mesin virtual atau menggunakan mesin yang terletak di LAN Anda. Kebanyakan distro linux memiliki server mail di luar kotak. Konfigurasikan dan bersenang-senanglah. Saya menggunakan exim4 default pada Debian 7 yang mendengarkan antarmuka LAN-nya.
  3. Perpustakaan mailing menggunakan koneksi langsung. Libs lebih mudah diatur. Saya menggunakan SwiftMailer dan dengan sempurna mengirim email dari akun Gmail. Saya pikir PHPMailer juga cukup bagus.

Apa pun pilihan Anda, saya sarankan Anda menggunakan beberapa lapisan abstraksi. Anda dapat menggunakan perpustakaan PHP pada mesin pengembangan Anda yang menjalankan Windows dan cukup mail() berfungsi pada mesin produksi dengan Linux. Lapisan abstraksi memungkinkan Anda untuk menukar driver surat tergantung pada sistem yang menjalankan aplikasi Anda. Buat abstrak MyMailer kelas atau antarmuka dengan metode send() abstrak. Mewarisi dua kelas MyPhpMailer dan MySwiftMailer. Terapkan metode send() dengan cara yang tepat.

Ada beberapa server SMTP yang bekerja tanpa otentikasi, tetapi jika server membutuhkan otentikasi, tidak ada cara untuk mengelak dari itu. 

Fungsi surat bawaan PHP sangat terbatas - menentukan server SMTP hanya dimungkinkan di Windows. Pada * nix, mail() akan menggunakan binari OS.

Jika Anda ingin mengirim E-Mail ke server SMTP yang sewenang-wenang di internet, pertimbangkan untuk menggunakan perpustakaan seperti SwiftMailer . Itu akan memungkinkan Anda untuk menggunakan, misalnya, server keluar Google Mail. 

Dalam kasus di mana Anda meng-hosting situs Wordpress di Linux dan memiliki akses server, Anda dapat menyimpan beberapa sakit kepala dengan menginstal msmtp yang memungkinkan Anda mengirim via smtp dari fungsi standar php mail (). msmtp adalah alternatif yang lebih sederhana untuk postfix yang membutuhkan konfigurasi lebih banyak. 

Berikut langkah-langkahnya:

Instal msmtp

Sudo apt-get install msmtp-mta ca-certificates

Buat file konfigurasi baru:

Sudo nano /etc/msmtprc

... dengan informasi konfigurasi berikut:

# Set defaults.    
defaults

# Enable or disable TLS/SSL encryption.
tls on
tls_starttls on
tls_trust_file /etc/ssl/certs/ca-certificates.crt

# Set up a default account's settings.
account default
Host 
port 587
auth on
user <[email protected]>
password 
from <[email protected]>
syslog LOG_MAIL

Anda perlu mengganti data konfigurasi yang diwakili oleh semua yang ada di dalam "<" dan ">" (inklusif, hapus ini). Untuk Host/nama pengguna/kata sandi, gunakan kredensial normal Anda untuk mengirim email melalui penyedia email Anda.

Katakan PHP untuk menggunakannya

Sudo nano /etc/php5/Apache2/php.ini

Tambahkan baris ini:

sendmail_path = /usr/bin/msmtp -t

Dokumentasi lengkap dapat ditemukan di sini:

https://marlam.de/msmtp/