我为同事的项目安装了调查网络应用LimeSurvey。它很棒。我已经根据自己的喜好定制了HTML,CSS(带有单独的打印样式表)和JavaScript。
我需要用户能够发送动态生成的问题页面的内容(在我们的案例中实际上是“建议”,但仍然是“系统问题”)在电子邮件正文中,或作为附件。此内容包含许多具有简单格式(一些粗体)文本内容的div。这个电子邮件最好使用我定义的打印样式表,但实际上任何可读的都可以。
我会使用像EcoSafe这样的现有服务,但该服务会访问给定的网址并将其转换为PDF。这意味着他们获得了调查的首页,而不是用户看到的动态生成的页面内容。
我已经搜索并发现了一些可以发送格式化电子邮件的PHP库,但我几乎没有PHP经验。我想也许我可以使用JavaScript或JQuery来获取页面内容,然后使用服务器端工具将该内容发送到电子邮件中...但我不知道从哪里开始。我可以完全访问我们的Web服务器,因此可以安装所需的任何库或脚本。
或者如果甚至有办法用mailto:
链接做到这一点,那就足够了。
有人知道如何在电子邮件中发送动态生成页面的内容吗?
提前致谢。
答案 0 :(得分:1)
编辑:正如Cheekysoft在评论中指出的那样,所写的代码不安全,并允许恶意用户通过您的应用发送任意电子邮件内容。
换句话说,不要使用下面的代码。
我最终使用jQuery和PHP的组合来完成工作。
效果很好!
如果它将来会帮助任何人,这里是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>
答案 1 :(得分:1)
您可以使用LimeSurvey的附带系统。
丹尼斯