自動返信メールの実現

2017年9月15日 at 15:29

c5バージョン
8.1.0

利用ブラウザ
chrome最新版、及びIE11

お世話になります。
concrete5の標準フォームには、フォーム入力者に対する自動返信メール機能が無いとのことで、これをどうにか実現したく思っております。
検索等してみたところ、5.7以前での実現方法やアドオンは存在するようですが、8以降では機能しない模様で、困り果てております。
フォームの入力内容を入力者のメールアドレスに送信出来ればいいのですが…どなたか知恵をお貸し願えませんでしょうか。
どうぞよろしくお願いいたします。

タグ:

Re: 自動返信メールの実現

2017年9月15日 at 16:00
下記の記事はv5.7での内容ですが、こちらで動きませんでしょうか?
私はv8.1とv8.2を利用していますが、下記の記事を参考に自動返信メールを実現しております。

■標準のメールフォームに確認メール送信機能とCSVを Shift JIS に変換する機能を追加する
https://concrete5-japan.org/help/5-7/recipes/form-confirmation-csv/


■【concrete5】concrete5 ver5.7のフォームに自動返信機能をつける方法

http://onocom.net/blog/%E3%80%90concrete5%E3%80%91concrete5-ver5-7%E3%81%AE%E3%83%95%E3%82%A9%E3%83%BC%E3%83%A0%E3%81%AB%E8%87%AA%E5%8B%95%E8%BF%94%E4%BF%A1%E6%A9%9F%E...
 

Re: 自動返信メールの実現

2017年9月15日 at 18:16
KMiura 様

早速のご返信有難う御座います。
頂戴しました情報を元に、対応を行ってみます。

※KMiura 様の投稿への返信リンクをクリックすると真っ白な画面となり、投稿できませんでしたのでこちらより失礼いたします。
 

Re: 自動返信メールの実現

2017年9月15日 at 18:48
KMiura 様

お教えいただいた通り、「標準のメールフォームに確認メール送信機能とCSVを Shift JIS に変換する機能を追加する」ページにあるGithubからダウンロードしたソースを指定場所へアップロードし、レガシーフォームをページ内に作成、「【concrete5】concrete5 ver5.7のフォームに自動返信機能をつける方法」を参考に、メールアドレスの入力設定にて、「このEmailアドレスへ送信」のチェックを入れ、フォームのオプションで「送信されたフォームをメールアドレスに送る」に自分自身のメールアドレスを設定いたしました。
フォームからメッセージを送信すると、管理者側のメールは確かに届くのですが、入力者側への自動送信メールはやはり届きません。迷惑メールフォルダにも届いておりませんでした。
concrete5上では特にエラーも出ていないように見えます。フォームのログには、確かにデータが保存されておりました。

ソースをアップロードした後、フォーム側やconcrete5の管理画面上で何か設定等が必要なのでしょうか。頂いたURL2件をしっかり読み、対応したはずですが…何か漏れがあるのか…。

お手数おかけしますが、お力添え願えませんでしょうか。
 

Re: 自動返信メールの実現

2017年9月17日 at 17:29
すみません。勘違いしておりました。。
ご紹介させていただいた実装方法は「レガシーフォーム」ブロックを利用した場合でした。
「レガシーフォーム」と「フォーム」がごっちゃになっておりました。失礼しました。

で、礼羽さんが利用されているブロックは「フォーム」ブロックかと思います。
「フォーム」ブロックはExpressを利用しているため、ソース上で言うと「blocks/form/controller.php」ではなく「blocks/express_form/controller.php」で処理されています。そのため、ご紹介した方法で自動返信が出来なかったのだと思います。

改めてExpressを利用した場合の自動返信についてですが、
私も簡単に調べて見たのですが、意外にも実装方法を紹介しているサイトを見つけることができず、カスタマイズするにもサービスプロバイダーをオーバーライドする必要がありそうで、ちょっと難解です…
もし通常の「フォーム」ブロックで自動返信が行える方法が分かったらまた共有させていただこうと思いますが、取り急ぎであれば「レガシーフォーム」への切り替えも検討いただいた方が良いかもしれません。
 

Re: 自動返信メールの実現

2017年9月19日 at 10:29
KMiura 様

ご返信有難うございます。
フォームブロックを使わなければならない理由はありませんでしたので、「レガシーフォーム」を作成して動作確認を試みましたが、やはり管理者へのメールは届きますがフォーム入力者への返信は送信されません…。
c5管理画面より、レガシーフォームの回答を確認すると、確かに入力した内容が記録されているので、レガシーフォーム自体は問題なく動作している様子なのですが…。

・標準のメールフォームに確認メール送信機能とCSVを Shift JIS に変換する機能を追加する のページより、ソースをダウンロードして指定の場所へアップロード
・レガシーフォームを作成し、「メールアドレス」の質問作成時に「このEmailアドレスへ返信」にチェックを入れる
・新着フォームのメール通知を受け取る にもチェックを入れて、レガシーフォームを公開

この状態で動作確認を行ったのですが、冒頭の状態です。
管理画面からログを確認してみましたが、特にエラー等も出ていません。ログには管理者側へのメール送信が問題なく完了した旨が並んでおりました。
何度も申し訳ございませんが、ご助力頂ければ幸いです。どうぞよろしくお願いいたします。
 

Re: 自動返信メールの実現

2017年9月19日 at 11:34
礼羽さん

レガシーフォームの編集ダイアログ上で、オプションタブを開くと「送信されたフォームをメールアドレスに送る」のチェックがあると思います。ここをチェックは入ってますでしょうか?
application/blocks/form/controller.phpの497行目あたりに下記のような条件判定があるので、「送信されたフォームをメールアドレスに送る」のチェックを入れていただければメールが飛ぶと思います。

if (intval($this->notifyMeOnSubmission) > 0 && !$foundSpam) {


もしくは、管理者等へ送る必要がない場合は、497行目付近を下記のような感じに書き換えていただければうまく行くと思いますが、どうでしょうか。

if (intval($this->notifyMeOnSubmission) > 0 && !$foundSpam) {
if (Config::get('concrete.email.form_block.address') && strstr(Config::get('concrete.email.form_block.address'), '@')) {
$formFormEmailAddress = Config::get('concrete.email.form_block.address');
} else {
$adminUserInfo = UserInfo::getByID(USER_SUPER_ID);
$formFormEmailAddress = $adminUserInfo->getUserEmail();
}
$mh = Core::make('helper/mail');
$mh->to($this->recipientEmail);
$mh->from($formFormEmailAddress);
$mh->replyto($replyToEmailAddress);
$mh->addParameter('formName', $this->surveyName);
$mh->addParameter('questionSetId', $this->questionSetId);
$mh->addParameter('questionAnswerPairs', $questionAnswerPairs);
$mh->load('block_form_submission');
$mh->setSubject(t('%s Form Submission', $this->surveyName));
//echo $mh->body.'<br>';
@$mh->sendMail();
}
// ---------------------------------------------------------------
// 自動返信処理 Auto Reply
// ---------------------------------------------------------------
if ($sendConfirmationEmail && !$foundSpam) {
$adminUserInfo = UserInfo::getByID(USER_SUPER_ID);
$formFormEmailAddress = $adminUserInfo->getUserEmail();

$mh = null;
$mh = Core::make('helper/mail');
$mh->from($formFormEmailAddress); // 送信者メールアドレス(サイト管理者)
$mh->to($replyToEmailAddress); // 自動返信先(フォーム入力)
$mh->replyto($formFormEmailAddress); // 返信先メールアドレス(サイト管理者)
$mh->addParameter('formName', $this->surveyName);
$mh->addParameter('questionSetId', $this->questionSetId);
$mh->addParameter('questionAnswerPairs', $questionAnswerPairs);
$mh->load('block_form_auto_reply'); // メールのテンプレート
$mh->setSubject(t('%s Form Submission', $this->surveyName)); // メールの件名
@$mh->sendMail();
}
 

Re: 自動返信メールの実現

2017年9月19日 at 14:45
KMiura 様

早速のご返信有難う御座います。
>「送信されたフォームをメールアドレスに送る」のチェック
はい、確かにチェックを入れております。

また、ご案内頂いた変更を行いましたが反映されず、探ってみると\application\blocks\form内のcontroller.phpを読んでおらず、\concrete\blocks\form内のcontroller.phpを読み込んで処理が行われている様子で、こちらを変更すると動作が変わりました。
ご案内頂いた内容を参考に、以下のように変更することで、管理側に届いていたメールがフォーム入力者側に届くようになり、管理側には届かなくなるのを確認できました。

\concrete\blocks\form\controller.php


if (intval($this->notifyMeOnSubmission) > 0 && !$foundSpam) {
if (Config::get('concrete.email.form_block.address') && strstr(Config::get('concrete.email.form_block.address'), '@')) {
$formFormEmailAddress = Config::get('concrete.email.form_block.address');
} else {
$adminUserInfo = UserInfo::getByID(USER_SUPER_ID);
$formFormEmailAddress = $adminUserInfo->getUserEmail();
}

$mh = Core::make('helper/mail');
//$mh->to($this->recipientEmail); //元ソースはこうでした
$mh->to($replyToEmailAddress); //このように変更しました
$mh->from($formFormEmailAddress);
$mh->replyto($replyToEmailAddress);
$mh->addParameter('formName', $this->surveyName);
$mh->addParameter('questionSetId', $this->questionSetId);
$mh->addParameter('questionAnswerPairs', $questionAnswerPairs);
$mh->load('block_form_submission');
$mh->setSubject(t('%s Form Submission', $this->surveyName));
//echo $mh->body.'<br>';
@$mh->sendMail();
}


application側を読み込んでいない原因が解れば解決しそうなのですが…何か設定が必要なのでしょうか。度々申し訳ございませんがお知恵をお貸し願えれば幸いです。
 

Re: 自動返信メールの実現

2017年9月19日 at 16:26
ぱっと思いつく事としましては、管理画面「スタックとブロック>ブロックタイプ>レガシーフォーム」で更新を行ってみたらどうなりますでしょうか。
後は管理画面でキャッシュの削除で解決しないかどうか試していただけないでしょうか。
 

Re: 自動返信メールの実現

2017年9月19日 at 16:34
KMiura 様

「スタックとブロック>ブロックタイプ>レガシーフォーム」の更新を行った所、フォーム入力者、管理者双方にメールが届くようになりました!
テンプレートの指定もapplication側のcontrollerで指定した通りになっています。
キャッシュの削除は度々試していたのですが、レガシーフォームの更新は初めて実施しました。

この度は長きにわたりご助力頂き、誠に有難うございました。本当に助かりました。