tra-loi-cau-hoi-phat-trien-web.com

SMTP trên CodeIgniter cho thấy thành công, nhưng e-mail không được gửi đến tài khoản Gmail

Tôi đang cố gắng thiết lập SMTP trên CodeIgniter. Mọi thứ đều hoạt động tốt và tôi nhận được thông báo thành công trên trang, email đó được gửi mà không có lỗi. Nhưng, email không được gửi.

Đây là mã mà tôi sử dụng:

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

Điều gì có thể là lý do, e-mail đó không thực sự được gửi.

14
Wasif Khalil

Thay đổi nó thành như sau:

$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
RobinCominotto

đây là công việc đối với tôi trên máy chủ Apache2, ci 2.1.4: rất đơn giản: Đầu tiên hãy tạo một tệp có tên email.php trong thư mục application/config của bạn sau đó nhập mã sau vào chúng ~>

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

sau đó tạo một tệp có tên email.php trong thư mục ứng dụng/bộ điều khiển của bạn, sau đó nhập mã này ~>

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

thay thế 

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

đến

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

Sử dụng mã sau

Và đừng cố gắng không thể theo hai cài đặt bảo mật trong google.

1) https://www.google.com.vn/sinstall/security/lesssecur xuất hiện lại << bật nó lên

2) https://accounts.google.com/b/0/DisplayUnlockCaptcha << Nhấp vào tiếp tục

** Tắt xác minh 2 bước nếu bạn đã bật.

$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
kuma DK

Bạn đã kiểm tra tệp php.ini của mình chưa? Thử nó. Nếu không thì có lẽ bạn cũng có thể thử SPF . SPF hoặc Khung chính sách người gửi là một công nghệ mới cho phép dễ dàng phát hiện thư rác. Gmail tôn vinh SPF trừ khi bạn tự đánh dấu các email đó là không spam. Bất kể điều này, nếu bạn đã nhận được email trên một địa chỉ khác thì họ cũng phải truy cập Gmail. Kiểm tra thư rác của bạn kỹ lưỡng, vì Gmail không loại bỏ email ngay cả khi có sự nghi ngờ về thư rác rất cao thay vì chúng kết thúc trong thư mục Thư rác.

Bạn có thể thiết lập SPF cho phép máy chủ web của bạn gửi email, điều này sẽ dẫn đến việc Gmail chấp nhận email được gửi bởi máy chủ web của bạn là xác thực. Xem http://www.mydigitallife.info/how-to-set-up-and-create-sender-policy-framework-spf-domain-dns-txt-record-with-wizard/ và trình hướng dẫn từ Microsoft.

0
damek132

bạn có thể thay đổi tập lệnh này để gỡ lỗi,

$this->email->send();

đến

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

else
{
    show_error($this->email->print_debugger());
}
0
Triyana Syahfrudin

Tôi vừa sửa đổi mã từ RobinCominotto để làm cho nó hoạt động trong office365. 

PS: Tôi đã làm cho nó hoạt động khi đặt nó trong một bộ điều khiển và gọi hàm này chính xác như thế này. Khi tôi đặt cấu hình này trên email.php (tệp cấu hình) không hoạt động nữ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());
0
Vitor Vannuchi