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

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

新規登録して質問してみよう
ただいま回答率
85.50%
SMTP

SMTP(Simple Mail Transfer Protocol)はIPネットワークでemailを伝送する為のプロトコルです。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

1回答

4175閲覧

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

kans00229

総合スコア28

SMTP

SMTP(Simple Mail Transfer Protocol)はIPネットワークでemailを伝送する為のプロトコルです。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2016/10/20 08:56

【使用環境】
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

宜しくお願い致します。

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

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

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

投稿2016/10/22 10:47

popobot

総合スコア6586

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kans00229

2016/10/24 01:49

icchii様 ご回答有難うございます。 Qdmailについては、PHPについて教えて頂いた方が文字化け対策が良いとのことで、使用していました。qd_send_mail関数については、素人ながらアレっと思っておりました。 確かに、mb_send_mailの方が関連記事も多く、初心者の私には扱いやすいかもしれません。Qdmailについては、関連記事が少なくて困っておりました。 文字化けについても、設定してしまえば問題ないようですので、思い切ってmb_send_mailに変更してみようと思います。 有難うございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問