2015-09-16 7 views
-2

что я сделал до сих пор?Как использовать быструю почтовую библиотеку для отправки сообщения электронной почты в symfony2.7?

У меня есть класс webController Этот класс я создал pingserviceAction я хочу, чтобы отправить электронную почту всем URLs т.е. primary_url в моем случае , как я мог достигнуть этого заранее спасибо

Исходный код контроллера приводится ниже

<?php 
    namespace MWANMOBILE\Bundle\BIBundle\Controller\Admin; 
    use Symfony\Bundle\FrameworkBundle\Controller\Controller; 
    use Symfony\Component\HttpFoundation\Request; 
    use Symfony\Component\HttpFoundation\Response; 
    use Symfony\Component\Form\Extension\Core\ChoiceList\ChoiceList; 

    use MWANMOBILE\Bundle\BIBundle\Entity\Web; 
    use MWANMOBILE\Bundle\BIBundle\Form\Type\ServiceType; 
    use MWANMOBILE\Bundle\BIBundle\Form\Type\UserType; 

    class WebController extends Controller 
    { 
     public function pingserviceAction(Request $request) 
     { 
     $em = $this->getDoctrine()->getManager(); 

     $web_list = $em->getRepository('MWANMOBILEBIBundle:Web')->allWeb(); 

    // $web_url = $em->getRepository('MWANMOBILEBIBundle:Web')->allWebUrls(); 
    // var_dump($web_list); 
    // exit(); 

     $site_status = ''; 

     foreach ($web_list as $single_web_list) 
     { 

     $url= $single_web_list['primary_url']; 
     $st_email = $single_web_list['status_email']; 
     $st_message = $single_web_list['status_message']; 


     $ch = curl_init($url); 

     curl_setopt($ch, CURLOPT_NOBODY, true); 
     curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); 
     curl_exec($ch); 
     $retcode = curl_getinfo($ch, CURLINFO_HTTP_CODE); 
     curl_close($ch); 

     if (!200==$retcode) { 

      echo("comon"); 
      $subject= "sorry server is down due to maintenance work "; 

      $site_status.='site_down '; 

      $to = array('[email protected]'); 
      $this->getMailer()->composeAndSend('[email protected]', $to, $subject , $st_message); 

     } else 
     { 
      $site_status.='site_active '; 
     } 

     } 

     exit(); 
} 

}

Пытались вызвать неопределенный метод под названием "getMailer" класса «MWANMOBILE \ Bundle \ BIBundle \ Controller \ Admin \ W ebController».

+1

замените '' $ this-> getMailer() '' на '' $ this-> get ('mailer') '' –

+1

и прочитайте эту статью поваренной книги http://symfony.com/doc/current/cookbook/ email/email.html –

+0

Спасибо за помощь, когда я использую $ this-> get ('mailer'), он дает мне такую ​​ошибку. Попытка вызвать неопределенный метод с именем «composeAndSend» класса «Swift_Mailer». –

ответ

2

Вы используете метод, который не существует: getMailer (был такой методом в Symfony 1.x)

Чтобы получить Мейлер вам нужно получить почтовую службу по телефону $this->get('mailer') и использовать send метод, который принимает Swift_Message экземпляра в качестве аргумента. Так что все, что вам нужно сделать, это заменить:

$this->getMailer()->composeAndSend('[email protected]', $to, $subject , $st_message); 

с:

$message = \Swift_Message::newInstance() 
    ->setSubject($subject) 
    ->setFrom('[email protected]') 
    ->setTo($to) 
    ->setBody($st_message); 

$this->get('mailer')->send($message); 

Проверить official howto для получения дополнительной информации

+0

спасибо за руководство меня, у меня есть еще один вопрос, как я могу проверить, отправляется ли электронная почта или нет с локального хоста? как я могу использовать smtp gmail? –

+0

вам действительно нужно проверить документацию, все там: http://symfony.com/doc/current/cookbook/email/gmail.html и http://symfony.com/doc/current/cookbook/email/testing. html –

0

Вот полный рабочий метод, который вы можете скопировать пасту:

/** 
* @param $to 
* @param $from 
* @param $subject 
* @param $body 
*/ 
protected function sendEmail($to, $from, $subject, $body) 
{ 
    $email = \Swift_Message::newInstance() 
     ->setSubject($subject) 
     ->setFrom($from) 
     ->setTo($to) 
     ->setContentType("text/html") 
     ->setBody($body,'text/html'); 

     $this->container->get('mailer')->send($email); 
} 

Его также заявлено здесь: https://reformatcode.com

+0

Я использую то же самое в Symfony 2.8, но получаю Error: - Попытка вызвать неопределенный метод с именем «get» класса –

+0

Если вы используете его в контроллере, попробуйте вместо: $ this-> container-> get ('почтовик') -> отправить ($ электронной почты); это: $ this-> get ('mailer') -> отправить ($ email); –

+0

Да, я использую $ this-> get ('mailer') -> send ($ email); и получение Error messege "Попытка вызвать неопределенный метод с именем" get "класса" –

0

В Command (проверено в Symfony 3.1) вы должны использовать getContainer():

$ this-> getContainer() -> получить ('почтовик') -> отправить ($ сообщение);