2013-06-24 6 views
14

Próbuję skonfigurować SMTP na CodeIgniter. Wszystko działa dobrze i otrzymuję wiadomość powodzenia na stronie, że e-mail jest wysyłany bez błędów. Ale e-mail nie jest dostarczany.SMTP na CodeIgniter pokazuje sukces, ale e-mail nie jest dostarczany na konto Gmail

Oto kod, który używam:

$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(); 

Co może być powodem, że e-mail nie jest faktycznie dostarczone.

Odpowiedz

30

Zmień go na następujące kwestie:

$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

dzięki zadziałało poprzez zmianę „ssl: //smtp.googlemail.com "to" ssl: //smtp.gmail.com " –

+2

To daje mi' fsockopen(): php_network_getaddresses: getaddrinfo nie powiodło się: nazwa lub usługa nie jest znana. "Usunięcie' ssl: // 'od początku działającego adresu – machineaddict

+0

działa również na hotmail/outlook ?? – lazyme114

0

Sprawdziłeś plik php.ini? Spróbuj. Jeśli nie, to możesz też spróbować SPF. SPF lub Sender Policy Framework to nowa technologia, która pozwala na łatwe wykrywanie spamu. Gmail honoruje SPF, chyba że ręcznie oznaczysz te e-maile jako niebędące spamem. Niezależnie od tego, jeśli otrzymałeś e-maile z innego adresu, to również one muszą dotrzeć do Gmaila. Dokładnie sprawdź swój spam, ponieważ Gmail nie odrzuca wiadomości e-mail nawet w przypadku bardzo wysokiego podejrzenia spamu, zamiast tego trafia do folderu Spam.

Można skonfigurować SPF, który pozwala serwerowi internetowemu na wysyłanie wiadomości e-mail, dzięki czemu Gmail będzie akceptował wiadomości e-mail wysyłane przez serwer WWW jako autentyczne. Patrz: http://www.mydigitallife.info/how-to-set-up-and-create-sender-policy-framework-spf-domain-dns-txt-record-with-wizard/ i kreator firmy Microsoft.

+0

e-mail nie będą w folderze spamu –

0

można zmienić ten skrypt, na debugowanie problemu,

$this->email->send(); 

do

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

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

tu jest praca dla mnie na apache2 serwer, ci 2.1.4: jest bardzo prosty: najpierw utwórz plik o nazwie email.php w Twojej aplikacji/współpracy Katalog nfig następnie wpisz następujący kod wewnątrz nich ~>

<?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"; 
?> 

następnie utworzyć plik o nazwie email.php pod swoim katalogu application/controllers następnie wpisać ten kod ~>

<?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

zastąpić

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

do

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

To mi się udało, proste, ale niesamowite - dziękuję! – Raymond

+0

Proszę dodać wyjaśnienie do swojej odpowiedzi, aby było bardziej użyteczne dla innych czytelników –

+0

To działało. Próbowałem z wieloma innymi rozwiązaniami godzinami, dziękuję bardzo –

0

Użyj następującego kodu:

Nie możesz też nie używać dwóch ustawień zabezpieczeń w google.

1) https://www.google.com/settings/security/lesssecureapps < < go włączyć

2) https://accounts.google.com/b/0/DisplayUnlockCaptcha < < kliknij Kontynuuj

** Wyłącz weryfikację 2 krok, jeśli masz to włączone.

$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

Właśnie zmodyfikowany kod z RobinCominotto, aby pracować w Office 365.

PS: Mam to działa po umieszczeniu go w kontrolerze i wywołaniu tej funkcji dokładnie w ten sposób. .! Kiedy umieścić ten configs na email.php (plik konfiguracyjny) już nie działa :(

$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()); 
Powiązane problemy