web-dev-qa-db-ja.com

Codeigniter $ this-> email-> send()は機能しませんが、mail()は機能します

CI Email Classを使用しようとするとメールが送信されないのに対し、native PHP mail()Classを使用すると動作する理由はわかりません。

実際には送信されていないのに「メールが送信された」場合があり、「サーバーがセットアップされていません」というエラーが表示される場合があることに注意してください。

私はそれを設定する方法を理解しようとしましたが... ...何も...

コントローラーコードは次のとおりです。

 if($this->form_validation->run()){

                //Set Language
                $this->lang->load('site', $this->session->userdata('lang'));

                //Random key
                $user_valid_key = md5(uniqid());

                //Prepare email
                $this->load->library('email', array('mailtype' => 'html'));
                $this->email->from($this->config->item('email_signup_from'), 'Wondermark.net');
                $this->email->to($this->input->post('email'));
                $this->email->subject($this->lang->line('email_signup_subject'));

                //Format mail con %s per inserire i campi necessari
                $signup_msg = sprintf($this->lang->line('email_signup_message'), $this->input->post('fname'), base_url().'main/signup_confirm/'.$user_valid_key);

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

                if($this->email->send()){
                    //TODO: load view...
                    echo "email sent";
                }else{
                    $to = $this->input->post('email');
                    mail($to, 'test', 'Other sent option failed');
                    echo $this->input->post('email');
                    show_error($this->email->print_debugger());
                }

                //TODO: Add to db

            }else{

            // Form validation failed

}
10
Mr.Web

このセットアップメールを使用してください。

$this->load->library('email');

$config['protocol']    = 'smtp';
$config['smtp_Host']    = 'ssl://smtp.gmail.com';
$config['smtp_port']    = '465';
$config['smtp_timeout'] = '7';
$config['smtp_user']    = '[email protected]';
$config['smtp_pass']    = 'password';
$config['charset']    = 'utf-8';
$config['newline']    = "\r\n";
$config['mailtype'] = 'text'; // or html
$config['validation'] = TRUE; // bool whether to validate email or not      

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

$this->email->from('[email protected]', 'sender_name');
$this->email->to('[email protected]'); 
$this->email->subject('Email Test');
$this->email->message('Testing the email class.');  

$this->email->send();

echo $this->email->print_debugger();
24
Anand

私はこの問題に直面し、次の解決策を見つけました。メールの設定を少し変更すると、100%動作します:

$config['protocol'] = 'ssmtp';
$config['smtp_Host'] = 'ssl://ssmtp.gmail.com';
9
amisha

Codeigniterユーザーガイド: https://www.codeigniter.com/user_guide/libraries/email.html

このセットアップは私のために機能します:

$config = Array(
            'protocol' => 'smtp',
            'smtp_Host' => 'Your SMTP Server',
            'smtp_port' => 25,
            'smtp_user' => 'Your SMTP User',
            'smtp_pass' => 'Your SMTP Pass',
            'mailtype'  => 'html'
            );
$this->load->library('email', $config);
$this->email->set_newline("\r\n");

//Add file directory if you need to attach a file
$this->email->attach($file_dir_name);

$this->email->from('Sending Email', 'Sending Name');
$this->email->to('Recieving Email address'); 

$this->email->subject('Email Subject');
$this->email->message('Email Message'); 

if($this->email->send()){
   //Success email Sent
   echo $this->email->print_debugger();
}else{
   //Email Failed To Send
   echo $this->email->print_debugger();
}
2
Tim

数時間この同じ問題と戦った後、別のサーバーを介して送信するように設定を変更することにしました。何らかの理由で私の元のサーバーは、いくつかのアドレスに送信しますが、他のアドレスには送信しません(同じドメイン内)。 sendgridに変更するとすぐに、期待どおりに機能しました。

期待した結果が得られない場合は、別のsmtpサーバーを試してください。問題はあなたのコードではないかもしれません...

1
Tim Duncklee

私は同じ問題を抱えていて、Codeignitorのメール機能の代わりに以下のコードを試します。

mail('[email protected]' , 'Test', 'Test Email');

それは動作し、メールはメールアドレスに送信されます。そのメールはすでに作成されたメールアドレスで送信されました(私が思うに)。私の場合、次のとおりです。

[email protected]

そこで、このメールアドレスをコピーして、以下のコードで試してみます。

$this->email->from('[email protected]', 'www.domainserver.com');

そして、それはうまく機能します。一部のサーバーは、電子メールを送信するために既に作成された電子メールアドレスを必要とする一方で、他のサーバーはそうではないようです。

これが明確で役立つことを願っています。

1
Niroshan