2015-04-07 4 views
10

Есть ли у кого-нибудь рабочий пример, как я могу работать с PHPMailer в Laravel 5? В Laravel 4 это было тихо, просто использовать, но тот же метод не работает в L5. Вот это то, что я сделал в L4:Laravel 5 и PHPMailer

Добавлено в composer.json:

"phpmailer/phpmailer": "dev-master", 

И в controller я использовал это так:

$mail = new PHPMailer(true); 
try { 
    $mail->SMTPAuth(...); 
    $mail->SMTPSecure(...); 
    $mail->Host(...); 
    $mail->port(...); 

    . 
    . 
    . 

    $mail->MsgHTML($body); 
    $mail->Send(); 
} catch (phpmailerException $e) { 
    . 
    . 
} catch (Exception $e) { 
    . 
    . 
} 

Но это не работает L5. Есть идеи? Благодаря!

+0

Определить, что «не работает». Любая конкретная ошибка, исключение, что-то? –

+0

Почему вы хотите использовать PHPMailer в первую очередь? В Laravel есть хорошая встроенная реализация SwiftMailer. –

+0

Да, я буду использовать его, но это устаревший код, который мне нужно обновить с 4.2 до 5 на первом этапе. После этого я преобразую его в SwiftMailer. –

ответ

9

Ну, есть несколько ошибок, которые я думаю ... Это рабочий пример отправки почты с PhpMailer в Laravel 5. Просто протестируйте его.

 $mail = new \PHPMailer(true); // notice the \ you have to use root namespace here 
    try { 
     $mail->isSMTP(); // tell to use smtp 
     $mail->CharSet = "utf-8"; // set charset to utf8 
     $mail->SMTPAuth = true; // use smpt auth 
     $mail->SMTPSecure = "tls"; // or ssl 
     $mail->Host = "yourmailhost"; 
     $mail->Port = 2525; // most likely something different for you. This is the mailtrap.io port i use for testing. 
     $mail->Username = "username"; 
     $mail->Password = "password"; 
     $mail->setFrom("[email protected]", "Firstname Lastname"); 
     $mail->Subject = "Test"; 
     $mail->MsgHTML("This is a test"); 
     $mail->addAddress("[email protected]", "Recipient Name"); 
     $mail->send(); 
    } catch (phpmailerException $e) { 
     dd($e); 
    } catch (Exception $e) { 
     dd($e); 
    } 
    die('success'); 

И, конечно же, вам нужно сделать обновление композитора после добавления depency к composer.json

Однако я предпочел бы Laravel построенную в SwiftMailer. http://laravel.com/docs/5.0/mail

+0

Как я вижу, мой пример точно такой же, кроме * * +%! root namespace backslash char ... :) Мои глаза просто пропустили это, и я не знаю, почему ... :(Так что спасибо, он работает сейчас. И да, я изменю код на встроенную почтовую программу Laravel, но это устаревший код, и сначала я должен сделать обновление с 4.2 до 5, а затем сделаю некоторые улучшения. Еще раз спасибо! –

+0

Когда я сказал несколько ошибок, я думал, что вы используете такие вещи, как $ mail-> Host = "yourmailhost ", а не как назначение, а как функция $ mail-> Host (" yourmailhost "); но я вижу, вы только хотели указать, что вы вообще делали, и я не должен был видеть его как правильный синтаксис.Рад помочь вам в любом случае;) –

+0

может кто-нибудь ответить, как я могу использовать NONSSL в одних и тех же настройках? без использования ssl laravel дает ошибку, и у меня нет рабочих SSL-сертификатов –

4

Шаг1: Откройте окно командной строки и выполнить следующую команду

composer require phpmailer/phpmailer 

Шаг2: Добавьте следующее в вашем контроллере или где вы хотите использовать функции почты

use PHPMailerAutoload; 
use PHPMailer; 

Шаг 3: Используйте следующий код для отправки почты

$mail = new PHPMailer; 

// notice the \ you have to use root namespace here 
try { 
$mail->isSMTP(); // tell to use smtp 
$mail->CharSet = “utf-8”; // set charset to utf8 
$mail->Host = $_SERVER[‘MAIL_HOST_NAME’]; 
$mail->SMTPAuth = false; 
$mail->SMTPSecure = false; 
$mail->Port = 25; // most likely something different for you. This is the mailtrap.io port i use for testing. 
$mail->Username = “”; 
$mail->Password = “”; 
$mail->setFrom(“[email protected]”, “examle Team”); 
$mail->Subject = “examle”; 
$mail->MsgHTML(“This is a test new test”); 
$mail->addAddress(“[email protected]”, “admin”); 
$mail->addAddress(“[email protected]”, “test”); 
$mail->addReplyTo(‘[email protected]’, ‘Information’); 
$mail->addBCC(‘[email protected]’); 
$mail->addAttachment(‘/home/kundan/Desktop/abc.doc’, ‘abc.doc’); // Optional name 
$mail->SMTPOptions= array(
‘ssl’ => array(
‘verify_peer’ => false, 
‘verify_peer_name’ => false, 
‘allow_self_signed’ => true 
) 
); 

$mail->send(); 
} catch (phpmailerException $e) { 
dd($e); 
} catch (Exception $e) { 
dd($e); 
} 
dd(‘success’); 

для получения дополнительной информации: посетите здесь: http://programmerlab.com/question/how-to-use-phpmailer-in-laravel/

+0

Вы даже не пытались изменить свои комментарии к php. –

0

В Laravel 5.5 или выше, вам необходимо сделать следующие шаги

УСТАНАВЛИВАЕТЕ PHPMailer на вашем Laravel Application.

composer require phpmailer/phpmailer 

Затем перейдите к своему контроллеру, где вы хотите использовать phpmailer.

<?php 
namespace App\Http\Controllers; 

use PHPMailer\PHPMailer; 

class testPHPMailer extends Controller 
{ 
    public function index() 
    { 
     $text    = 'Hello Mail'; 
     $mail    = new PHPMailer\PHPMailer(); // create a n 
     $mail->SMTPDebug = 1; // debugging: 1 = errors and messages, 2 = messages only 
     $mail->SMTPAuth = true; // authentication enabled 
     $mail->SMTPSecure = 'ssl'; // secure transfer enabled REQUIRED for Gmail 
     $mail->Host  = "smtp.gmail.com"; 
     $mail->Port  = 465; // or 587 
     $mail->IsHTML(true); 
     $mail->Username = "[email protected]"; 
     $mail->Password = "testpass"; 
     $mail->SetFrom("[email protected]", 'Sender Name'); 
     $mail->Subject = "Test Subject"; 
     $mail->Body = $text; 
     $mail->AddAddress("[email protected]", "Receiver Name"); 
     if ($mail->Send()) { 
      return 'Email Sended Successfully'; 
     } else { 
      return 'Failed to Send Email'; 
     } 
    } 
}