Webアプリケーションで必須なのは、メールの送信です。残念ながらサイト管理者の環境では、PHPのデフォルトのmail関数および/usr/sbin/sendmailが効きません。そういう場合には、smtpサーバーを使って送信することができます。
ここでは、サイト管理者が構築した簡易メールサーバーによるコンタクト・システム、簡易ショッピングサイトでのメールの送信の仕方を記してみます。
まずは、system/libraries/Email.phpをapplcation/librariesにコピーし、メール送信の設定を行います。Emailクラスの暴騰の設定を次のように変更すれば、smtpでの送信が可能になります。
class CI_Email { var $useragent = "CodeIgniter"; var $mailpath = "/usr/sbin/sendmail"; // Sendmail path var $protocol = "smtp"; // mail/sendmail/smtp var $smtp_host = "mail.it-ishin.com"; // SMTP Server. Example: mail.earthlink.net var $smtp_user = "nomura"; // SMTP Username var $smtp_pass = "password"; // SMTP 出来るだけ複雑なものにする var $smtp_port = "587"; // SMTP Port var $smtp_timeout = 5; // SMTP Timeout in seconds var $wordwrap = TRUE; // TRUE/FALSE Turns word-wrap on/off var $wrapchars = "76"; // Number of characters to wrap at. var $mailtype = "text"; // text/html Defines email formatting var $charset = "utf-8"; // Default char set: iso-8859-1 or us-ascii var $multipart = "mixed"; // "mixed" (in the body) or "related" (separate) var $alt_message = ''; // Alternative message for HTML emails var $validate = FALSE; // TRUE/FALSE. Enables email validation var $priority = "3"; // Default priority (1 - 5) var $newline = "\n"; // Default newline. "\r\n" or "\n" (Use "\r\n" to comply with RFC 822) var $crlf = "\n"; // The RFC 2045 compliant CRLF for quoted-printable is "\r\n". Apparently some servers, // even on the receiving end think they need to muck with CRLFs, so using "\n", while // distasteful, is the only thing that seems to work for all environments. var $send_multipart = TRUE; // TRUE/FALSE - Yahoo does not like multipart alternative, so this is an override. Set to FALSE for Yahoo. var $bcc_batch_mode = FALSE; // TRUE/FALSE Turns on/off Bcc batch feature var $bcc_batch_size = 200; // If bcc_batch_mode = TRUE, sets max number of Bccs in each batch var $_safe_mode = FALSE; var $_subject = ""; var $_body = ""; var $_finalbody = ""; var $_alt_boundary = ""; var $_atc_boundary = ""; var $_header_str = ""; var $_smtp_connect = ""; var $_encoding = "8bit"; var $_IP = FALSE; var $_smtp_auth = FALSE; var $_replyto_flag = FALSE; var $_debug_msg = array(); var $_recipients = array(); var $_cc_array = array(); var $_bcc_array = array(); var $_headers = array(); var $_attach_name = array(); var $_attach_type = array(); var $_attach_disp = array(); var $_protocols = array('mail', 'sendmail', 'smtp'); var $_base_charsets = array('us-ascii', 'iso-2022-'); // 7-bit charsets (excluding language suffix) var $_bit_depths = array('7bit', '8bit'); var $_priorities = array('1 (Highest)', '2 (High)', '3 (Normal)', '4 (Low)', '5 (Lowest)');
こうしておいて、shop_model.phpのsendmail関数を次のように書き換えました。
// メール送信処理 function sendmail($mail) { # Emailクラスをロードし、初期化します。 $this->load->library('email'); //$config['protocol'] = 'mail'; $config['protocol'] = 'smtp'; //プロトコルをsmtpに変更 $config['charset'] = 'ISO-2022-JP'; $config['wordwrap'] = FALSE; $this->email->initialize($config); # メールの内容を変数に代入します。 $from_name = $mail['from_name']; $from = $mail['from']; $to = $mail['to']; $bcc = $mail['bcc']; $subject = $mail['subject']; $body = $mail['body']; # メールヘッダのMIMEエンコードおよび文字エンコードの変換をします。 $from_name = mb_encode_mimeheader($from_name, $config['charset']); //$subject = mb_encode_mimeheader($subject, $config['charset']); //文字化けしました。 $subject = mb_convert_encoding($subject, $config['charset'], $this->config->item('charset')); # 本文の文字エンコードを変換します。 $body = mb_convert_encoding($body, $config['charset'], $this->config->item('charset')); # 差出人、あて先、Bcc、件名、本文を設定します。 $this->email->from($from, $from_name); $this->email->to($to); $this->email->bcc($bcc); $this->email->subject($subject); $this->email->message($body); # send()メソッドで実際にメールを送信します。 if ($this->email->send()) { return TRUE; } else { return FALSE; } }
ということですが、メールが送信できませんと、ブラウザの画面は「システムエラー」だけの冷たい表示になります。メールサーバーを借りているのならば、その設定を利用すると良いでしょう。また、レンタル・サーバーでは、mail関数が機能するかも知れません。
さて、CodeIgniterを学んでフレームワークについて感じたことを暫定的にまとめてみます。
今後の計画としては、①CodeIgniter2.☓では削除されたCRUD機能の代わりになるサードパーティのCRUDシステムを利用して、認証機能付きのバックエンドを作ってみる②「CodeIgniter徹底入門」の第10章レシピ集は既に古くなっており、ライブラリーダウンロードのために記載されているサイト自体が存在しないので、何とかする。これについては、https://ellislab.com/blog/entry/codeigniter-wiki-moved に記載されている内容が頼りになるかもしれないが、必ずしもハッピーになれるわけではないーなどが挙げられます。