2013-06-24 9 views
14

Sto tentando di impostare SMTP su CodeIgniter. Tutto sta funzionando bene e ricevo il messaggio di successo sulla pagina, quell'email viene inviata senza errori. Ma l'e-mail non viene consegnata.SMTP su CodeIgniter mostra esito positivo, ma l'e-mail non viene consegnata all'account Gmail

Ecco il codice, che uso:

$config = Array(
'protocol' => 'smtp', 
'smtp_host' => 'ssl://smtp.googlemail.com', 
'smtp_port' => 465, 
'smtp_user' => '[email protected]', 
'smtp_pass' => '***', 
'mailtype' => 'html', 
'charset' => 'iso-8859-1', 
'wordwrap' => TRUE 
); 
$this->load->library('email', $config); 

$this->email->from('[email protected]', 'Explendid Videos'); 
$this->email->to('[email protected]'); 
$this->email->reply_to('[email protected]', 'Explendid Videos'); 


$this->email->subject('Explendid Video - Contact form'); 

$message = "Contact form\n\n"; 
$message .= "Name: ". $_POST['name'] . "\n"; 
$message .= "Phone: ". $_POST['phone'] . "\n"; 
$message .= "Email: ". $_POST['email'] . "\n"; 

$this->email->message($message); 

$this->email->send(); 

Quale può essere la ragione, che la posta elettronica non viene effettivamente consegnato.

risposta

30

Modifica al seguente:

$ci = get_instance(); 
$ci->load->library('email'); 
$config['protocol'] = "smtp"; 
$config['smtp_host'] = "ssl://smtp.gmail.com"; 
$config['smtp_port'] = "465"; 
$config['smtp_user'] = "[email protected]"; 
$config['smtp_pass'] = "yourpassword"; 
$config['charset'] = "utf-8"; 
$config['mailtype'] = "html"; 
$config['newline'] = "\r\n"; 

$ci->email->initialize($config); 

$ci->email->from('[email protected]', 'Blabla'); 
$list = array('[email protected]'); 
$ci->email->to($list); 
$this->email->reply_to('[email protected]', 'Explendid Videos'); 
$ci->email->subject('This is an email test'); 
$ci->email->message('It is working. Great!'); 
$ci->email->send(); 
+3

grazie ha funzionato modificando "ssl: //smtp.googlemail.com "a" ssl: //smtp.gmail.com " –

+2

Questo mi dà' fsockopen(): php_network_getaddresses: getaddrinfo non riuscito: nome o servizio non noto'. Rimozione di 'ssl: //' dall'inizio dell'indirizzo lavorato. – machineaddict

+0

funziona anche per hotmail/outlook ?? – lazyme114

0

Hai controllato il tuo file php.ini? Provalo. Se no allora forse potresti provare anche SPF. SPF o Sender Policy Framework è una nuova tecnologia che consente di rilevare facilmente lo spam. Gmail rispetta SPF a meno che tu non contrassegni manualmente le e-mail come non spam. Indipendentemente da ciò, se hai ricevuto email su un altro indirizzo, devono aver raggiunto anche Gmail. Controlla accuratamente il tuo spam, in quanto Gmail non elimina le email anche in caso di sospetto spam, ma finisce nella cartella Spam.

È possibile impostare un SPF che consente al server Web di inviare e-mail che comporterà l'accettazione da parte di Gmail delle e-mail inviate dal proprio server web come autentiche. Vedere http://www.mydigitallife.info/how-to-set-up-and-create-sender-policy-framework-spf-domain-dns-txt-record-with-wizard/ e una procedura guidata di Microsoft.

+0

email non stanno andando nella cartella spam –

0

è possibile modificare questo script, per eseguire il debug del problema,

$this->email->send(); 

a

if($this->email->send()) 
{ 
    echo 'Your email was sent.'; 
} 

else 
{ 
    show_error($this->email->print_debugger()); 
} 
4

qui è il lavoro per me su apache2 server, ci 2.1.4: è molto semplice: prima crea un file chiamato email.php sotto la tua applicazione/co directory nfig quindi digitare il seguente codice al loro interno ~>

<?php 
$config['protocol'] = 'smtp'; 
$config['smtp_host'] = 'ssl://smtp.gmail.com'; 
$config['smtp_port'] = '465'; 
$config['smtp_user'] = 'u'r gmail account'; 
$config['smtp_pass'] = 'password of u'r account'; 
$config['charset'] = 'utf-8'; 
$config['newline'] = "\r\n"; 
?> 

quindi creare un file chiamato email.php sotto la directory di applicazione/controller quindi digitare il codice ~>

<?php 
    class Email extends CI_Controller 
    { 

    function send() 
    { 
    // Loads the email library 
    $this->load->library('email'); 
    // FCPATH refers to the CodeIgniter install directory 
    // Specifying a file to be attached with the email 
    // if u wish attach a file uncomment the script bellow: 
    //$file = FCPATH . 'yourfilename.txt'; 
    // Defines the email details 
    $this->email->from('[email protected]', 'ur Name'); 
    $this->email->to('[email protected]'); 
    $this->email->subject('Email Test'); 
    $this->email->message('Testing the email class.'); 
    //also this script 
    //$this->email->attach($file); 
    // The email->send() statement will return a true or false 
    // If true, the email will be sent 
    if ($this->email->send()) { 
    echo "you are luck!"; 
    } else { 
    echo $this->email->print_debugger(); 
    } 
    } 

    } 
    ?> 
2

sostituire

$config['protocol'] = 'smtp'; 

a

$config['protocol'] = 'sendmail'; 
+0

Questo ha fatto il trucco per me. Semplice ma fantastico - grazie! – Raymond

+0

Per favore aggiungi qualche spiegazione alla tua risposta per renderla più utile per altri lettori. –

+0

Ha funzionato. Ho provato con molte altre soluzioni per ore. Grazie mille –

0

Utilizzare il seguente codice

E non essere in grado di seguire due impostazioni di sicurezza in google.

1) https://www.google.com/settings/security/lesssecureapps < < accenderlo

2) https://accounts.google.com/b/0/DisplayUnlockCaptcha < < fare clic su Continua

** Spegnere la verifica 2 step se lo avete abilitato.

$config = Array(
     'protocol' => 'smtp', 
     'smtp_host' => 'ssl://smtp.gmail.com', 
     'smtp_port' => 465, 
     'smtp_user' => '[email protected]', //email id 
     'smtp_pass' => 'xxxxxxxxxxx',   // password 
     'mailtype' => 'html', 
     'charset' => 'iso-8859-1' 
    ); 
    $this->load->library('email', $config); 
    $this->email->set_newline("\r\n"); 

    $this->email->from('[email protected]','my name'); 
    $this->email->to("[email protected]"); // email array 
    $this->email->subject('email subject'); 
    $this->email->message("my mail body"); 

    $result = $this->email->send(); 


    show_error($this->email->print_debugger()); // for debugging purpose :: remove this once it works... 
0

Ho appena modificato il codice RobinCominotto per farlo funzionare in Office365.

PS: ho funzionato quando lo inserisco in un controller e chiamando questa funzione esattamente come questo. .! Quando ho posto questa configs su email.php (file di configurazione) non funziona più :(

$ci = get_instance(); 
    $ci->load->library('email'); 
    $config['protocol'] = "smtp"; 
    $config['smtp_host'] = "smtp.office365.com"; 
    $config['smtp_port'] = "587"; 
    $config['smtp_user'] = "<HERE COMES YOUR EMAIL>"; 
    $config['smtp_pass'] = "<HERE COMES THE PASSWORD OF EMAIL>"; 
    $config['charset'] = "utf-8"; 
    $config['mailtype'] = "html"; 
    $config['newline'] = "\r\n"; 

    $ci->email->initialize($config); 

    $ci->email->from('<HERE COMES YOUR EMAIL>', 'Blabla'); 
    $list = array('<HERE COMES TO EMAIL>', '<HERE COMES TO EMAIL>'); 
    $ci->email->to($list); 
    $this->email->reply_to('<HERE COMES YOUR EMAIL>', 'Explendid Videos'); 
    $ci->email->subject('This is an email test'); 
    $ci->email->message('It is working. Great!'); 
    $ci->email->send(); 
    print_r($ci->email->print_debugger()); 
Problemi correlati