質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

89.23%

Qdmailのテンプレート機能を利用した複数宛先送信

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 1,879

kans00229

score 28

【使用環境】 
PHPバージョン5.6  
phpMyAdminバージョン情報: 4.5.1
Qdmail ver 1.2.6b  
XAMPPにてローカル環境

Qdmailを利用して、複数の宛先にそれぞれ内容を変えて(テンプレート機能利用)メールを送信したいと
考えています。

下記のサイト参考にさせて頂いたサイト
①http://hal456.net/qdmail/toseparate
②http://hal456.net/qdmail/oopbase#p1.5
③http://hal456.net/qdmail/simple_replace_basic#p1.1

下記のソース①にて、複数の宛先にそれぞれメールを送る
ことはできました。

上記③のサイトにて、qdmailにはテンプレート機能(SimpleReplace機能)があり
自動的にリプレース出来るとあるのですが、エラーが出て上手くいきません。
※エラーについてはページ下部に表示したものです。

私のPHPに関する理解が悪いため、非常にちぐはぐな事をしている可能性もあります。
色々調べて見ましたが、テンプレート機能についての情報が少なく手詰まり状態です。

お力を貸していただけますと幸いです。
宜しくお願いします。

ソース①

//複数のメールを配信する
//こちらの場合は、エラーもなく複数の宛先に送ることが出来ました。

//$_POST["select_mail"]は
 ["select_mail"]=>
  array(2) {
    [0]=>
    string(26) "******@gmail.com"
    [1]=>
    string(25) "*******@yahoo.co.jp"
  }
の状態でPOSTされます。

$mail_title = "メールタイトル";
$select_mail = h($_POST["select_mail"]);
     try {
//メール配信
          $mailer = new Qdmail();

          //文字コードの設定
          $mailer->charset('iso-2022-jp', '7bit');

          foreach( $select_mail as $key => $to ){
            $mailer -> to($to , null , true );
            $mailer->text("メール送信内容"."\n"
                        . "メールアドレス:$select_mail "       
                  );
     }

          $mailer->subject($mail_title);
          $mailer->from('info@gmail.com' ,'***からのメール');

          //パラメータ部分
          $param = array(
            'host' => '',
            'port' => 587,
            'from' => '******,
            'user' => '*******',
            'pass' => '*******',
            'protocol' =>'SMTP_AUTH',
          );
          $mailer->subject($mail_title);
          $mailer->smtp(true);
          $mailer->smtpServer($param);
          $mailer -> toSeparate( true );
          $mailer ->send();
          $err_mail = $mailer->errorStatment();

           if(!empty($err_mail)){
             var_dump($err_mail);
             throw new Exception("Error Processing Request", 1);
            }

        header('Location: ../index.php');
        exit();
    } catch (Exception $ex) {
        exit('メール配信が出来ませんでした。' . $ex->getMessage());
    }
}  
ソース②
//サイトを参考にテンプレート機能を盛り込んだソース
//動きを見るためのものですので、こちらは$_POST["select_mail"]ではなくメールアドレス部分を直書きとしています

$data = array(
    array('name'=>'メールアドレス1の人','mail'=>'******@gmail.com',),
    array('name'=>'メールアドレス2の人','mail'=>'*******@yahoo.co.jp',),
); 
     try {
          $mailer = new Qdmail();
      $mailer->charset('iso-2022-jp', '7bit');
          $subject="こんにちは、%name%さん。";

          $body="%name%さんの登録内容をお送りします。名前:%name%";
          $from = array( 'from@example.com' , '送り元日本語名' );
          $option = array('type'=>'text','option'=>array('simpleReplace'=>true));
          $mailer = qd_send_mail( $option , $data , $subject , $body , $from ); 
 //パラメータ部分
          $param = array(
            'host' => '',
            'port' => 587,
            'from' => '******,
            'user' => '*******',
            'pass' => '*******',
            'protocol' =>'SMTP_AUTH',
          );
          $mailer->smtp(true);
          $mailer->smtpServer($param);
          $mailer ->send();
          $err_mail = $mailer->errorStatment();

            if(!empty($err_mail)){
              var_dump($err_mail);
              throw new Exception("Error Processing Request", 1);
             }

        header('Location: ../index.php');
        exit();
    } catch (Exception $ex) {
        exit('メール配信が出来ませんでした。' . $ex->getMessage());
    }
}    

こちらを実行したときに出るエラーは下記のものとなります。
内容から、メールアドレスが有効でないとの記述が予想されますが
解決方法がわからないのが現状です。

Strict Standards: Non-static method QdmailBase::getInstance() should not be called statically in C:\xampp\htdocs\qdmail\qdmail.php on line 46

Warning: mail(): Failed to connect to mailserver at "localhost" port 25, verify your "SMTP" and "smtp_port" setting in php.ini or use ini_set() in C:\xampp\htdocs\qdmail\qdmail.php on line 2178
Qdmail error: Qdmail Version 1.2.6b ,PHP Version 5.6.15
Qdmail error: OS WINNT ; PHP Version 5.6.15 ; Qdmail version 1.2.6b 
php.ini status: mb_language = Japanese ; mb_internal_encoding = UTF-8 ; mb_detect_order = ASCII,JIS,UTF-8,EUC-JP,SJIS 
Qdmail Status debug: 0, log: 0, errorlog: 0
Qdmail error: No send . Because PHP mail function replied error line -> 2190
Qdmail error: Error 'TO' Separate mode in Sendbase function , the Address is -> ******@gmail.com line -> 2096
Qdmail error: Error happen, see upper line -> 2194
Qdmail error: Error 'TO' Separate mode in Sendbase function , the Address is -> *******@yahoo.co.jp line -> 2096
Qdmail error: Send Error line -> 2115

Fatal error: Call to a member function smtp() on boolean in C:\xampp\htdocs\*****.php on line 111

宜しくお願い致します。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

0

Qdmailは使ったことないですが、ドキュメント等を見た感じだと、
ソース②ではqd_send_mail関数を使って差し込みメールをやろうとしていますが、
この関数は単独でメール送信までする関数だと思います。
一方、ソース①の$mailer = new Qdmail();の方法は、オブジェクト指向っぽくなっており、
各パラメータを個々に設定した後に$mailer->send()でメールを送信するものだと思います。
なので、Qdmailクラスでqd_send_mail関数を使うことはできないと思います。単にqd_send_mail関数を使えばいいだけだと思います。

余談ですが、Qdmailってどうなんですかね...ドキュメントもイマイチですし、メンテされているのか謎です。今ならPHP標準ライブラリのmb_send_mailを使った方が関連記事とかも豊富な気がしました。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/10/24 10:49

    icchii様 ご回答有難うございます。

    Qdmailについては、PHPについて教えて頂いた方が文字化け対策が良いとのことで、使用していました。qd_send_mail関数については、素人ながらアレっと思っておりました。

    確かに、mb_send_mailの方が関連記事も多く、初心者の私には扱いやすいかもしれません。Qdmailについては、関連記事が少なくて困っておりました。

    文字化けについても、設定してしまえば問題ないようですので、思い切ってmb_send_mailに変更してみようと思います。

    有難うございました。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 89.23%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る