2011-10-27 12 views
5

Sto tentando di inviare email da un account Gmail utilizzando le impostazioni CakEmail e SMTP.CakePHP-2.0: Come posso inviare e-mail da un account Gmail usando l'impostazione CakEmail e SMTP?

Sarebbe bello se qualcuno dicesse il processo passo dopo passo cosa fare.

ho aggiunto quanto segue in app/config/email.php =>

<?php 
class EmailConfig { 
    public $smtp = array(
     'host' => 'ssl://smtp.gmail.com', 
     'port' => 465, 
     'username' => '[email protected]', 
     'password' => 'secret' 
    ); 
} 

Ora Come posso inviare e-mail a qualsiasi account di posta elettronica da "[email protected]"?

E 'CakePHP-2.0

risposta

2

Basta impostare il from:

<?php 
$email = new CakeEmail(); 
$email->from(array('[email protected]' => 'Your Name')); 
$email->to('[email protected]'); 
$email->subject('Sent from Gmail'); 
$email->send('My message'); // or use a template etc 

dovrebbe farlo.

È possibile impostare anche sender; Non sono al 100%, ma immagino che sarà utile quando si invierà l'e-mail "da" gmail tramite il proprio sito web; forse per impedire che l'e-mail venga rilevata come spam.

$email->sender('[email protected]', 'MyApp emailer');

+0

Lavoro come un fascino –

0

Attualmente sto usando un account Gmail di inviare la posta. Uso i modelli e una funzione di impostazione della posta elettronica riutilizzabile. Ecco una copia del mio codice:

// app/controllers/users_controller.php 
function sendemail($subject, $body, $to, $template) { 
    $this->Email->smtpOptions = array(
     'port'=>'465', 
     'timeout'=>'30', 
     'host' => 'ssl://smtp.gmail.com', 
     'username'=>'[email protected]', 
     'password'=>'secret', 
    ); 
    $this->Email->delivery = 'smtp'; 
    //$this->Email->delivery = 'debug'; 
    $this->Email->from = 'Username <[email protected]>'; 
    $this->Email->to  = $to; 
    $this->Email->subject = $subject; 
    $this->set('body', $body); 
    $this->set('smtp_errors', $this->Email->smtpError); 
    $this->Email->send($content, $template); 
} 

// app/controllers/users_controller.php 
// Excerpt from new user method in users controller: 
function add() { 
    // ...other stuff 
    $body['user'] = $user['User']['username']; 
    $this->sendemail('Domain.com New User Signup!', $body, '[email protected]', 'newuser'); 
    // ...other stuff 
} 

// app/views/elements/email/text/newuser.ctp 
Everyone, 
Another new user just signed up for Domain. Stats below: 
User: <?php echo $body['user'] . "\r\r"; ?> 
Just thought you'd like to know :) 
-Janet 
+0

Questo è il vecchio componente di posta elettronica. – shibly

0

Utilizzare il componente Swiftmailer; questo è il componente più facile da usare.

http://bakery.cakephp.org/articles/mhuggins/2008/06/11/improved-swiftmailer-component

ci sono alcune modifiche che è necessario fare durante l'utilizzo di questo con CakePHP 2.0 in poi. CakePHP 2.0 fornisce una directory di visualizzazione 'E-mail', che viene utilizzata per memorizzare tutti i modelli di e-mail.

Modifiche al componente:

  1. Change tutto var dichiarazioni public
  2. Change public $layout = 'Emails'; a public $viewPath = '/Emails';

  3. Modificare il percorso di rendering in _getBodyText:

$body = $this->controller->render($this->viewPath . DS . 'text' . DS . $view, $this->layout . DS . 'text'.DS.'default');

  1. Modificare il percorso di rendering in _getBodyHtml:

$body = $this->controller->render($this->viewPath . DS . 'html' . DS . $view, $this->layout . DS . 'html'.DS.'default');

  1. commentare le righe:

$bodyText = $this->_getBodyText($view); $message->setBody($bodyText, "text/plain");

Il componente Swiftmailer invia un'e-mail vuota se si imposta sia il testo HTML & TEXT attivo. Legge da entrambe le viste e-mail & aggiunge il corpo per il testo. Questo è il motivo per commentare queste due righe se vuoi inviare email html.

La seconda ragione è che se entrambi sono attivati ​​& si dispone di contenuti in entrambi i file email.html.ctp & email.text.ctp, crea un problema di intestazione che solo il formato di testo viene visualizzato in messaggi di posta elettronica (in realtà entrambi i formati sono presenti in intestazione, ma sopprime la parte html & mostra la parte di testo).

3

La configurazione giusta è:

public $gmail = array(
    'host' => 'ssl://smtp.gmail.com', 
    'port' => 465, 
    'username' => '[email protected]', 
    'password' => 'secret', 
    'transport' => 'Smtp' 
); 

Quindi, non dimenticate il trasporti elemento.

Problemi correlati