CodeIgniterでSMTPをセットアップしようとしています。すべてが正常に機能しており、ページで成功メッセージを受け取りました。そのメールはエラーなしで送信されます。ただし、メールは配信されません。
私が使用するコードは次のとおりです。
$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();
理由は何ですか、実際には電子メールは配信されません。
次のように変更します。
$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();
取り替える
$config['protocol'] = 'smtp';
に
$config['protocol'] = 'sendmail';
これはApache2サーバー、ci 2.1.4で私のために働いています:その非常に簡単:最初にapplication/configディレクトリの下にemail.phpというファイルを作成し、次にそれらの中に次のコードを入力してください〜>
<?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";
?>
次に、application/controllersディレクトリの下にemail.phpというファイルを作成し、このコードを入力します〜>
<?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();
}
}
}
?>
次のコードを使用してください
そして、Googleの2つのセキュリティ設定に従わないことを禁じます。
1) https://www.google.com/settings/security/lesssecureapps <<有効にする
2) https://accounts.google.com/b/0/DisplayUnlockCaptcha << [続行]をクリック
**有効にした場合は、2段階認証をオフにします。
$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...
Php.iniファイルを確認しましたか?それを試してみてください。そうでない場合は、おそらくSPFを試すこともできます。 SPFまたはSender Policy Frameworkは、スパムを簡単に検出できる新しいテクノロジーです。これらのメールをスパムではないと手動でマークしない限り、GmailはSPFを優先します。これに関係なく、別のアドレスでメールを受信した場合は、それらもGmailに到達している必要があります。スパムを徹底的にチェックしてください。Gmailはスパムの疑いが非常に高い場合でもメールを破棄せず、スパムフォルダーに入れます。
Webサーバーが電子メールを送信できるようにするSPFを設定できます。これにより、GmailがWebサーバーから送信された電子メールを本物として受け入れるようになります。 http://www.mydigitallife.info/how-to-set-up-and-create-sender-policy-framework-spf-domain-dns-txt-record-with-wizard/ を参照してくださいMicrosoftのウィザード。
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'] = "<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());