pengembangan-web-mp-pd.com

Menggunakan swiftmailer php dengan gmail

Saya sedang menulis skrip sederhana di mana akun gmail digunakan untuk mengirim email ke dirinya sendiri. 

Saya mengubah script dari SwiftMailer's reference , tapi saya tidak mendapatkan hasil apa pun. Apa yang salah? 

Sunting: setelah debugging lebih lanjut saya menemukan pernyataan itu

$result = $mailer->send($message);

menyebabkan kode gagal (gema di bawahnya tidak dicetak).

Kenapa ini? Hanya karena pesan tidak terkirim, program macet? : / 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>

<body>
<?php
    require_once '/var/www/Swift/lib/Swift_required.php';
    echo 'Mail sent <br />';  

/*  //create the transport
    $transport = Swift_SmtpTransport::newInstance('smtp.gmail.com', 587);
      ->setUsername('[email protected]')
      ->setPassword('softrain1234')
    ;
*/

    $transport = Swift_SmtpTransport::newInstance('smtp.gmail.com', 587)
      ->setUsername('[email protected]')
      ->setPassword('password')
    ;

    echo 'line 40 <br />';
    $mailer = Swift_Mailer::newInstance($transport);
    $message = Swift_Message::newInstance('Wonderful Subject')
      ->setFrom(array('[email protected]' => 'Evaluaciones'))
      ->setTo(array('[email protected]'=> 'A name'))
      ->setBody('Test Message Body')
    ;
    echo 'line 52 <br />';

    $result = $mailer->send($message);
    echo $result;
    echo 'line 58 <br />';

?>
</body>
</html>

Bentuk tes:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
    <head>
       <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
        <title>Test Mail Script</title>
    </head>
    <body>
        <form action="scriptmail.php" method="post">
            <input type="submit"/>
            </table>
        </form>
  </body>
</html>
35
andandandand

Jangan bermaksud menghidupkan kembali posting lama, tetapi untuk berjaga-jaga jika ada orang lain yang mencari jawabannya, dan karena posting ini muncul selama pencarian saya untuk mencari solusi terlepas dari usia.

Saat menggunakan PHP SwiftMailer untuk terhubung ke akun email Gmail atau Google Apps, Anda perlu menggunakan yang berikut ini

$transporter = Swift_SmtpTransport::newInstance('smtp.gmail.com', 465, 'ssl')
  ->setUsername($this->username)
  ->setPassword($this->password);

$this->mailer = Swift_Mailer::newInstance($transporter);

Ini berfungsi baik untuk saya. Dalam kode asli, Anda menggunakan port 587 bukan 465 dan Anda tidak menentukan protokol (ssl). Tidak tahu apakah itu sedikit berarti, tetapi bagi saya port 587 gagal dan 465 bekerja dengan baik.

Semoga itu bisa membantu.

85
fullybaked

Saya menemukan pertanyaan ini melakukan pencarian google dan menggunakan kode dalam jawaban yang diberikan oleh fullbaked. Itu membuat saya sampai pada titik di mana saya dapat melihat dalam Pengecualian bahwa server Google smtp merespons dengan kode kesalahan yang menunjukkan kata sandi dan nama pengguna tidak diterima. Setelah diselidiki lebih lanjut, saya menemukan langkah-langkah berikut. Sekarang ini berfungsi dengan baik dan saya dapat terus menyempurnakan kode untuk produksi.

Tidak yakin kapan Google melakukan perubahan tetapi selain mengkonfigurasi kode Anda dengan nama pengguna, kata sandi, dan port Google (465/ssl atau 587/tls) Anda perlu melakukan langkah-langkah berikut untuk dapat menggunakan server Google smtp.

Untuk menggunakan server smtp gmail dengan akun gmail Anda, Anda perlu:

1) Di Google "Pengaturan akun" aktifkan "Akses untuk aplikasi yang kurang aman" dengan mengaturnya ke "Izinkan".

2) Dalam pengaturan gmail di bawah tab "Penerusan dan POP/IMAP", periksa Status IMAP, itu harus diaktifkan . (Ini akan memungkinkan email yang dikirim untuk disimpan di folder terkirim.)

3) Jika setelah langkah 1 dan 2 Anda masih melempar Perkecualian Google smtp server tidak menerima nama pengguna dan kata sandi yang Anda butuhkan untuk membuka browser, buka gmail dan masuk, lalu buka tab lain di browser yang sama dan buka alamat ini:
https://accounts.google.com/DisplayUnlockCaptcha

According to Google you may have to enter a captcha.

4) Segera kirim email dari kode Anda karena ini akan memungkinkan diizinkan untuk menggunakan akun gmail Anda.

Semoga ini membantu.

35
Gene

Saya menemukan bahwa apa yang dikatakan evad itu benar, tetapi saya harus mengubah pekerjaannya sedikit untuk versi Swift Mailer saat ini .

$transporter = Swift_SmtpTransport::newInstance('smtp.gmail.com', 465, 'ssl')
  ->setUsername('[email protected]')
  ->setPassword('password');

$mailer = Swift_Mailer::newInstance($transporter);

Harus bekerja dengan baik.

6
Richard

465 adalah port untuk ssl, 587 digunakan untuk enkripsi tls (lihat http://swiftmailer.org/docs/sending.html#encrypted-smtp )

3
ducin

Sistem SMail GMail memiliki masalah yang diberikan SSL dan porta. Saya merasa sulit untuk membuatnya bekerja dengan PHP dengan baik.

Hal terbaik yang saya temukan, yang berfungsi adalah phpGMailer . Anda mungkin dapat menyaring kode itu untuk melihat bagaimana mereka membuatnya bekerja, tetapi itu selalu berhasil dengan sempurna bagi saya. 

Saya tahu ini tidak membahas masalah SwiftMail, hanya mengira saya akan menunjukkan itu :)

3
Brad F Jacobs

Saya juga datang ke sini setelah jam penelitian. Saya akhirnya menemukan jawaban yang benar. Saya ingin mengirim email DARI server email google dan bukan dari Host saya dengan otentikasi smtp.

Anda dapat melacak email dengan tajuk lengkapnya di dalam gmail, ikuti panduan ini.

https://support.google.com/mail/answer/29436?hl=id

@fulbaked memiliki jawaban yang tepat untuk mengautentikasi email Anda melalui smtp tetapi Anda masih akan mengirim melalui Host Anda.

$transporter = Swift_SmtpTransport::newInstance('smtp.gmail.com', 465, 'ssl')
->setUsername($this->username)
->setPassword($this->password);

$this->mailer = Swift_Mailer::newInstance($transporter);

@ducin benar dengan berbagai port dan tipe enkripsi.

$transporter = Swift_SmtpTransport::newInstance('smtp.gmail.com', 465, 'ssl')

ATAU lebih modern dan lebih aman, gunakan;

$transporter = Swift_SmtpTransport::newInstance('smtp.gmail.com', 587, 'tls')

Jika Anda ingin mengirim langsung dari server gmail, Anda perlu mengatur mode otorisasi. Plain adalah default.

$transporter = Swift_SmtpTransport::newInstance('smtp.gmail.com', 587, 'tls')
->setAuthMode('login')
->setUsername('[email protected]')
->setPassword('password');

$mailer = Swift_Mailer::newInstance($transporter);

@ gen juga benar, Anda harus mengotentikasi aplikasi Anda, jadi ikuti instruksinya.

Selanjutnya untuk mencegah email Anda masuk ke folder spam, Anda juga harus menambahkan catatan teks dns dengan DKIM (kunci domain)

https://support.google.com/a/answer/174124?hl=id

Catatan SPF

https://support.google.com/a/answer/33786?hl=id

dan DMARC

https://support.google.com/a/answer/2466580?hl=id

0
Dan Kinchen