web-dev-qa-db-ja.com

PHPMailerをCodeigniter 3と統合する方法

こんにちは、CodeigniterアプリケーションでGitHUBの PHPMailer Library を使用しようとしています。

コードをダウンロードし、application\libraryフォルダーに解凍しました。そのため、PHPMailerのソースコードが存在するvendorというフォルダーがあります。

ここで、Bizmailer_Controller.phpという名前のファイルを作成しました。

<?php defined('BASEPATH') OR exit('No direct script access allowed');

/**
* 
*/
class Bizmailer_Controller extends CI_Controller
{

    public function __construct()
    {
        parent::__construct();

        require "vendor\phpmailer\phpmailer\PHPMailerAutoload";
        $this->Bizmailer = new PHPMailer();
        //Set the required config parameters
        $this->Bizmailer->isSMTP();                                      // Set mailer to use SMTP
        $this->Bizmailer->Host = 'smtp1.example.com;smtp2.example.com';  // Specify main and backup SMTP servers
        $this->Bizmailer->SMTPAuth = true;                               // Enable SMTP authentication
        $this->Bizmailer->Username = '[email protected]';                 // SMTP username
        $this->Bizmailer->Password = 'secret';                           // SMTP password
        $this->Bizmailer->SMTPSecure = 'tls';                            // Enable TLS encryption, `ssl` also accepted
        $this->Bizmailer->Port = 465;    
        //return $api;
    }
}

今、私のコントローラーでこのようにロードしようとしています:

$this->load->library('Bizmailer');
$mail = new Bizmailer();

そして、私はこのエラーを取得します:

エラーが発生しました

要求されたクラスをロードできません:Bizmailer

したがって、このライブラリをCodeigniterにロードまたは統合する方法を教えてください。

8
Rajan

ここにガイドがあります

1. PHP Mailerをインストールする

Githubから最新のPHPMailer Buildをダウンロードします。プロジェクトを見つけることができます こちら

「クローンまたはダウンロード」をクリックして、Zipとしてダウンロードします-下の画像のように。 PHP Mailer Download as Zip

Zip内のフォルダーはPHPMailer-masterと呼ばれます。 application/third_party /フォルダーでこれを解凍し、フォルダーの名前をphpmailerに変更します。このようなものが表示されるはずです enter image description here

2. PHP Mailer Library

PHPMailerオブジェクト(Phpmailer_library.php)を処理するライブラリを作成するのが最善です。このライブラリは次のようになります。

class Phpmailer_library
{
    public function __construct()
    {
        log_message('Debug', 'PHPMailer class is loaded.');
    }

    public function load()
    {
        require_once(APPPATH."third_party/phpmailer/PHPMailerAutoload.php");
        $objMail = new PHPMailer;
        return $objMail;
    }
}

3.コントローラー、モデルなどのいずれかでこのライブラリを使用します。

class Welcome extends CI_Controller {


    public function index()
    {
        $this->load->library("phpmailer_library");
        $objMail = $this->phpmailer_library->load();
    }
}

私はこれがほとんど仕事をするはずだと思います。何か問題があれば、遠慮なく尋ねてください;)


アップデート25.06.2018

PHPMailerの連中がオートローダーを削除したので、次の2つのオプションがあります。

1。)Composer経由

知らなかった人のために-CodeigniterはComposerをサポートしています-単にオートロードをアクティブにする必要があります-これはconfig.phpで見つけることができます

$config['composer_autoload'] = true;

詳細については、こちらをご覧ください here

その後-composerのように実行

composer require phpmailer/phpmailer

これで、application/vendorフォルダphpmailerファイル。

ライブラリは次のようになります

class Phpmailer_library
{
    public function __construct()
    {
        log_message('Debug', 'PHPMailer class is loaded.');
    }

    public function load()
    {
        $objMail = new PHPMailer\PHPMailer\PHPMailer();
        return $objMail;
    }
}

2。)ダウンロード

手順1に従う

ライブラリは次のようになります

class Phpmailer_library
{
    public function __construct()
    {
        log_message('Debug', 'PHPMailer class is loaded.');
    }

    public function load()
    {
        require_once(APPPATH.'third_party/phpmailer/src/PHPMailer.php');
        require_once(APPPATH.'third_party/phpmailer/src/SMTP.php');

        $objMail = new PHPMailer\PHPMailer\PHPMailer();
        return $objMail;
    }
}

そして、他のすべては同じままでなければなりません

14
sintakonte

Codeigniter 2/3用のphpメーラーライブラリがあります。 this および this を確認できます。

0
MorganFreeFarm

**

2019年8月更新

**

最初に、最新の PHPMailerライブラリファイル をダウンロードし、すべてのファイルをCodeIgniterアプリケーションのapplication/third_party /フォルダーに配置します。

ここで、PHPMailerオブジェクトを処理するライブラリ(application/libraries/Phpmailer_lib.php)を作成します。

  • PHPMailerライブラリファイルを含めます。
  • PHPMailerクラスを初期化します。
  • PHPMailerオブジェクトを返します。

    use PHPMailer\PHPMailer\PHPMailer;
    use PHPMailer\PHPMailer\Exception;
    class PHPMailer_Lib
    {
    public function __construct(){
        log_message('Debug', 'PHPMailer class is loaded.');
    }
    
    public function load(){
        // Include PHPMailer library files
        require_once APPPATH.'third_party/phpmailer/Exception.php';
        require_once APPPATH.'third_party/phpmailer/PHPMailer.php';
        require_once APPPATH.'third_party/phpmailer/SMTP.php';
    
        $mail = new PHPMailer(true);
        return $mail;
    }
    }
    

このコードを使用して、コントローラーからPHPMailerを使用してSMTPサーバー経由で電子メールを送信します。

class Email extends CI_Controller{

    function  __construct(){
        parent::__construct();
    }

    function send(){
        // Load PHPMailer library
        $this->load->library('phpmailer_lib');

        // PHPMailer object
        $mail = $this->phpmailer_lib->load();

        // SMTP configuration
        $mail->isSMTP();
        $mail->Host     = 'smtp.example.com';
        $mail->SMTPAuth = true;
        $mail->Username = '[email protected]';
        $mail->Password = '********';
        $mail->SMTPSecure = 'ssl';
        $mail->Port     = 465;

        $mail->setFrom('[email protected]', 'CodexWorld');
        $mail->addReplyTo('[email protected]', 'CodexWorld');

        // Add a recipient
        $mail->addAddress('[email protected]');

        // Add cc or bcc 
        $mail->addCC('[email protected]');
        $mail->addBCC('[email protected]');

        // Email subject
        $mail->Subject = 'Send Email via SMTP using PHPMailer in CodeIgniter';

        // Set email format to HTML
        $mail->isHTML(true);

        // Email body content
        $mailContent = "<h1>Send HTML Email using SMTP in CodeIgniter</h1>
            <p>This is a test email sending using SMTP mail server with PHPMailer.</p>";
        $mail->Body = $mailContent;

        // Send email
        if(!$mail->send()){
            echo 'Message could not be sent.';
            echo 'Mailer Error: ' . $mail->ErrorInfo;
        }else{
            echo 'Message has been sent';
        }
    }

}
0
stevebaros