SMTP на CodeIgniter показує успіх, але електронна пошта не доставляється до облікового запису Gmail

Я намагаюся настроїти SMTP на CodeIgniter. Все працює нормально, і я отримую повідомлення про успіх на сторінці, це повідомлення надсилається без помилок. Але, електронна пошта не доставляється.

Ось код, який я використовую:

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

Що може бути причиною того, що електронна пошта фактично не доставляється.

14

7 Відповіді

Змініть його на наступне:

$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();
30
додано
Це дає мені fsockopen (): php_network_getaddresses: failed getaddrinfo: ім'я або служба невідома . Видалення ssl:// з початку роботи оброблено.
додано Автор machineaddict, джерело
Дякую! він працював, змінивши "ssl: //smtp.googlemail.com" на "ssl: //smtp.gmail.com"
додано Автор Wasif Khalil, джерело
Чи буде він працювати для hotmail/Outlook, а також?
додано Автор lazyme114, джерело

here is work for me on apache2 server, ci 2.1.4: its very simple: first create a file called email.php under your application/config directory then type the following code inside them~>

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

then create a file called email.php under your application/controllers directory then type this code~>

    <?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();
    }
    }

    }
    ?>
4
додано

замінити

$config['proдоcol'] = 'smtp';

до

$config['proдоcol'] = 'sendmail';
3
додано
Будь ласка, додайте деяке пояснення до вашої відповіді, щоб зробити її корисною для інших читачів.
додано Автор Mohit Jain, джерело
Це спрацювало. Випробували багато інших рішень протягом багатьох годин. Дуже дякую
додано Автор Srujan Reddy, джерело
Це зробило мене для мене трюком. Просто ще дивовижно - спасибі!
додано Автор Raymond, джерело

Ви перевірили файл php.ini? Спробуй це. Якщо ні, то, можливо, ви також можете спробувати SPF. SPF або Sender Policy Framework - це нова технологія, що дозволяє легко виявити спам. Gmail віддає нагороду SPF, якщо ви не вручну відзначаєте ці електронні листи як не спам. Незалежно від цього, якщо ви отримали електронні листи на іншу адресу, вони також повинні були мати Gmail. Перевірте ваш спам ретельно, оскільки Gmail не відкидає електронні листи навіть при дуже високій підозрі на спам, а вони потрапляють до папки "Спам".

Ви можете налаштувати SPF, який дозволяє вашому веб-серверу відправляти електронні листи, в результаті чого Gmail приймає повідомлення електронної пошти, відправленого вашим веб-сервером, як справжній. Див. http://www.mydigitallife.info/how-to-set-up-and-create-sender-policy-framework-spf-domain-dns-txt-record-with-wizard/ і майстер з Microsoft.

0
додано
Електронна пошта не збирається в папці спаму.
додано Автор Wasif Khalil, джерело

Використовуйте наступний код

І не наважуйтеся на нездатність дотримуватися двох налаштувань безпеки в Google.

1) https://www.google.com/settings/security/lesssecureapps << turn it on

2) https://accounts.google.com/b/0/DisplayUnlockCaptcha << Click continue

** Вимкніть двоетапну перевірку, якщо вона ввімкнена.

$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
додано

ви можете змінити цей сценарій, для налагодження вашої проблеми,

$this->email->send();

до

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

else
{
    show_error($this->email->print_debugger());
}
0
додано

Я просто змінив код з RobinCominotto , щоб він працював в office365.

PS: Я працював, розмістивши його в контролері, і називаю цю функцію саме так. Коли я розміщую ці конфігурації на email.php (файл конфігурації) більше не працює :(

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

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

    $ci->email->from('', 'Blabla');
    $list = array('', '');
    $ci->email->to($list);
    $this->email->reply_to('', '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());
0
додано