3

同僚のプロジェクト用にセットアップされた調査 Web アプリLimeSurveyをインストールしています。それはうまくいきます。HTML、CSS (別の印刷スタイルシートを使用)、および JavaScript を好みに合わせてカスタマイズしました。

動的に生成された質問のページの内容(この場合、実際には「推奨事項」ですが、システムへの「質問」) を電子メールの本文または添付ファイルとして送信できるようにする必要があります。このコンテンツには、単純な書式設定 (一部太字) のテキスト コンテンツを含む多数の div が含まれています。この電子メールでは、私が定義した印刷スタイルシートを使用するのが望ましいですが、実際には読み取り可能なものであれば何でもかまいません。

EcoSafeなどの既存のサービスを使用しますが、そのサービスは指定された URL 自体にアクセスし、それを PDF に変換します。これは、ユーザーが見る動的に生成されたページ コンテンツではなく、アンケートのフロント ページを取得することを意味します。

フォーマットされた電子メールを送信できる PHP ライブラリの話を検索して見つけましたが、PHP の経験はほとんどありません。JavaScript または JQuery を使用してページのコンテンツを取得し、サーバー側のツールを使用してそのコンテンツをメールで送信できるのではないかと考えていますが、どこから始めればよいかわかりません。Web サーバーに完全にアクセスできるので、必要なライブラリやスクリプトをインストールできます。

または、リンクを使用してこれを行う方法さえあれば、mailto:それで十分です。

動的に生成されたページのコンテンツを電子メールで送信する方法についてアイデアを持っている人はいますか?

前もって感謝します。

4

2 に答える 2

1

LimeSurvey の付属システムを使用できます。

  1. Expression Manager を使用して体の一部を構築します。例:「{QuestionCode.question} に対するあなたの回答は {QuestionCode.NAOK} でした」などの方程式の質問タイプ (後で使用する方が簡単です)
  2. 'Send basic admin notification email to:' を使用してメール アドレスを入力します。EM も使用できます。たとえば、{if(Q1.NAOK=='Y','yesadress@example.org','adress@example.組織')} ...
  3. 電子メール テンプレート/基本的な管理者通知を使用して、必要なすべてのコンテンツを配置します。

デニス

于 2014-04-17T08:23:03.470 に答える
1

編集: Cheekysoft がコメントで指摘しているように、書かれているこのコードは安全ではなく、悪意のあるユーザーがアプリを通じて任意の電子メール コンテンツを送信できるようになります。

つまり、以下のコードをそのまま使用しないでください。


最終的には、jQuery と PHP を組み合わせて使用​​することになりました。

  1. 調査ページに、ユーザーの電子メール アドレスを収集するための小さなフォームを追加しました。
  2. jQueryを使用して、このフォームとページのラッパー タグの内容を PHP スクリプトに POST しました。
  3. その PHP スクリプトでは、Emogrifierを使用して、jQuery から渡された HTML にスタイルシートを参照としてインライン タグを追加しました ( Gmail を含むほとんどの電子メール クライアントは、リンクされた styleheets の使用を許可していないため)。
  4. 次に (まだ PHP スクリプトで) SwiftMailer (指摘してくれてありがとう、Marc B) と Google Apps アカウントの SMTP 機能を使用して実際のメールを送信しました。

よく働く!

将来誰かに役立つ場合に備えて、PHPスクリプト(サニタイズ済み)は次のとおりです。

<?php

/***** INITIALIZE *****/

/* Import libraries */
require_once 'swiftmailer/swift_required.php';
require_once 'emogrifier/emogrifier.php';

/* Email stylesheet location */
$stylesheet = 'http://example.com/email.css';

/* SMTP Account Info */
$smtpusername = "sender@gmail.com";
$smtppassword = "senderpassword";
$smtpserver = "smtp.gmail.com";
$smtpport = 465;
$smtpsecurity = "ssl";


/***** RETRIEVE THE DATA *****/

/* Retrieve the passed-in variables */
/* HTML for the email body */
$html = $_POST['content'];
/* Recipient mail address */
$address = $_POST['address'];
/* Recipient name */
$name = $_POST['name'];
if ($name==NULL || $name=="") {
    $name = "You";
}

/***** MODIFY THE HTML *****/
// Get stylesheet contents as a string
$css = file_get_contents($stylesheet);

// Convert stylesheet into in-line styles using Emogrifier - http://www.pelagodesign.com/sidecar/emogrifier/
$converter = new Emogrifier($html, $css);
$content = $converter->emogrify();


/***** CREATE THE MESSAGE *****/

/* Create the message */
$message = Swift_Message::newInstance()

  //Give the message a subject
  ->setSubject("Results for $name")

  //Set the From address with an associative array
  ->setFrom(array('sender@gmail.com' => 'Sender Name'))

  //Set the To addresses with an associative array
  ->setTo(array($address => $name))

  //Give it a body
  ->setBody($content, 'text/html')
  ;

/***** SEND THE EMAIL *****/

//Create the Transport
$transport = Swift_SmtpTransport::newInstance($smtpserver, $smtpport, $smtpsecurity)
  ->setUsername($smtpusername)
  ->setPassword($smtppassword)
  ;

//Create the Mailer using your created Transport
$mailer = Swift_Mailer::newInstance($transport);

//Send the message
$result = $mailer->send($message);

if ($result == "1") {
    echo "<span class='sendstatus success'>Email sent successfully. </span>";
} else {
    echo "<span class='sendstatus failure'>An error occurred. Result code: $result </span>";
}

?>

そして、ここに jQuery フォームがあります (少し単純化されています):

<div id="emailresults">
    <form id="emailRecsForm" action="http://example.com/emailresults/emailrecs.php"> <!-- THIS PAGE WHERE THE PHP ABOVE IS LOCATED -->
        <h3><img src="email-icon.png" /> Email Your Results</h3>
        <label for="name">Name</label><input type="text" id="name" name="name" placeholder="Recipient's name (optional)" />
        <label for="address">Email address</label><input type="text" id="address" name="address" class="required email" placeholder="recipient@address.org" />
        <div id="submitdiv"><input type="submit" class="submit" value="Send Results" /></div>
    </form>
    <!-- the result of the send will be rendered inside this div -->
    <div id="result"></div>
</div>

<script>
/* attach a submit handler to the form */
$("#emailRecsForm").submit(function(event) {
    /* stop form from submitting normally */
    event.preventDefault();

    $( "#submitdiv" ).empty().append('<span class="sendstatus working"><img src="/images/loadwheel.gif" alt="Sending..."></img></span>');

    /* get some values from elements on the page: */
    var $form = $( this ),
        name = $form.find( 'input[name="name"]' ).val(),
        address = $form.find( 'input[name="address"]' ).val(),
        html = $('.container').html(),
        url = "http://example.com/emailrecs.php";

    /* Send the data using post and put the results in a div */
    $.post( url, { name: name, address: address, content: html },
      function( data ) {
          $( "#submitdiv" ).empty().append('<br />').append( data ).append('<input type="submit" class="submit" value="Send Results" />');
          $form.find( 'input[name="name"]' ).val("");
          $form.find( 'input[name="address"]' ).val("");
      }
    );
});
</script>
于 2011-09-29T21:09:51.730 に答える