mirror of https://github.com/BOINC/boinc.git
324 lines
12 KiB
PHP
324 lines
12 KiB
PHP
<?php
|
|
require_once("docutil.php");
|
|
page_head("Email tools: newsletters, reminders, and friend-to-friend");
|
|
echo "
|
|
BOINC provides PHP-based tools
|
|
for sending three types of email to participants:
|
|
<ul>
|
|
<li> <b>Newsletters</b>.
|
|
These are periodic (perhaps every few months) and are sent to all participants.
|
|
Typically you would use them to summarize your project's results,
|
|
to discuss its future plans, to make announcements, etc.
|
|
<li> <b>Reminders</b>.
|
|
These are sent to participants who seem to have stopped
|
|
computing to your project, or who signed up but never got any credit.
|
|
Typically they would be short messages,
|
|
encouraging the participant to take a specific action.
|
|
<li> <b>Friend-to-friend</b>.
|
|
These are sent by participants to their friends and family,
|
|
to tell them about your project and urge them to join.
|
|
The sender can add an optional message.
|
|
</ul>
|
|
Effective use of all types of email
|
|
is critical to maintaining and growing your participant base.
|
|
In the absence of any email,
|
|
participation typically decreases by a few percent every month.
|
|
<b>BOINC supplies the framework, but you must write the
|
|
actual emails, or modify BOINC's samples as needed for your project. </b>.
|
|
<p>
|
|
The newsletter and reminder scripts provide the following features:
|
|
<ul>
|
|
<li> They let you send different emails to different 'classes' of participants.
|
|
For example, you can send a different newsletter
|
|
to participants who haven't computed for your project in a while.
|
|
<li> They let you personalize emails,
|
|
e.g. by inserting the participant's name or their total credit.
|
|
<li> They provide a mechanism for inserting a
|
|
secure 'opt-out' link.
|
|
Note: You should ALWAYS include an 'opt-out' link
|
|
at the bottom of emails (both HTML and text).
|
|
In may be illegal for you to do a mass email without one.
|
|
Make sure you test this link.
|
|
</ul>
|
|
<p>
|
|
The scripts requires that you use
|
|
<a href=http://phpmailer.sourceforge.net/>PHPMailer</a>,
|
|
is a PHP function for sending mail that's more full-featured
|
|
than the one built into PHP.
|
|
Download it, put it in html/inc, and set the
|
|
USE_PHPMAILER, PHPMAILER_HOST, and PHPMAILER_MAILER variables in
|
|
<a href=http://boinc.berkeley.edu/web_config.php>your project.inc file</a>.
|
|
<p>
|
|
All of the tools let you send multipart HTML/text messages.
|
|
We recommend that you use this feature -
|
|
and HTML message can include your logo and/or institutional insignia,
|
|
can include hyperlinks,
|
|
and can look more attractive.
|
|
|
|
<p>
|
|
The general procedure for using each scripts is:
|
|
<ul>
|
|
<li> Create a directory (mass_email, reminder_email, or ffmail)
|
|
in your html/ops/ directory.
|
|
In that directory, create separate files for
|
|
the text body template, HTML body template, and subject line
|
|
to be sent to each class of participants.
|
|
NOTE: the HTML files are optional;
|
|
if you leave them out, text-only emails will be sent.
|
|
<li>
|
|
Run the script in testing mode (see below)
|
|
to ensure that the emails are as you intend.
|
|
<li>
|
|
Once testing is complete, run the script in production mode.
|
|
Typically, the newsletter script is run from the command line.
|
|
The reminder script is typically run as a
|
|
<a href=tasks.php>periodic task</a>, every 24 hours or so.
|
|
</ul>
|
|
|
|
The newsletter and reminder scripts use the recent-average credit
|
|
(expavg_credit) field in the user table.
|
|
To make sure this value is accurate,
|
|
run <a href=project_tasks.php>update_stats</a> manually
|
|
if you're not running it as a periodic task.
|
|
|
|
<h3>Personalizing emails</h3>
|
|
<p>
|
|
The newsletter and reminder scripts
|
|
replace the following macros in your email bodies
|
|
(both HTML and text):
|
|
";
|
|
list_start();
|
|
list_item("<name/>", "User name");
|
|
list_item("<create_time/>", "When account was created (D M Y)");
|
|
list_item("<total_credit/>", "User's total credit");
|
|
list_item("<opt_out_url/>",
|
|
"URL for opting out (this URL includes a salted version
|
|
of the participant's account key, and so is different for every participant).
|
|
");
|
|
list_item("<lapsed_interval/>",
|
|
"The number of days since user's client contacted server
|
|
(defined only for lapsed users, see below)."
|
|
);
|
|
list_item("<user_id/>",
|
|
"The user ID (use this to form URLs)"
|
|
);
|
|
list_end();
|
|
|
|
echo "
|
|
<p>
|
|
|
|
<h3>Avoiding spam filtering</h3>
|
|
Your email is less likely to be rejected by spam filters if:
|
|
<ul>
|
|
<li> Your HTML and text versions have the same text.
|
|
<li> Your HTML version either contains no images,
|
|
or has at least 400 words.
|
|
</ul>
|
|
|
|
<h2>Newsletters</h2>
|
|
<p>
|
|
The script <b>html/ops/mass_email_script.php</b>
|
|
is for sending email newsletters.
|
|
The script categorize participants as follows:
|
|
<ul>
|
|
<li> <b>Failed</b>: zero total credit.
|
|
These people failed to download and install the client software,
|
|
or failed to get it working (e.g. because of proxy problems)
|
|
or uninstalled it before finishing any work.
|
|
<li> <b>Lapsed</b>: nonzero total credit but recent average credit < 1:
|
|
These people did work in the past, but none recently.
|
|
<li> <b>Current</b>: recent average credit >= 1.
|
|
These are your active participants.
|
|
</ul>
|
|
|
|
To use the script, create the following files in html/ops/mass_email:
|
|
";
|
|
list_start();
|
|
list_item("failed_html",
|
|
"HTML message sent to failed users. Example: ".html_text(
|
|
"<html>
|
|
<body bgcolor=ffffcc>
|
|
Dear <name/>:
|
|
<p>
|
|
Test Project continues to do pioneering computational research
|
|
in the field of Submandibular Morphology.
|
|
In recent months we have discovered over 17 new varieties of Frombats.
|
|
<p>
|
|
Our records show that you created a Test Project account
|
|
on <create_time/> but that your computer hasn't completed any work.
|
|
Possibly you encountered problems installing or using the software.
|
|
Many of these problems have now been fixed,
|
|
and we encourage you to visit
|
|
<a href=http://a.b.c>our web site</a>,
|
|
download the latest version of the software, and try again.
|
|
<p>
|
|
<font size=-2>
|
|
To not receive future emails from Test Project,
|
|
<a href=<opt_out_url/>>click here</a>.
|
|
</font>
|
|
</td></tr></table>
|
|
</body>
|
|
</html>"
|
|
)."
|
|
");
|
|
list_item("failed_text", "Text message sent to failed users.
|
|
Example: ".html_text("
|
|
Dear <name/>:
|
|
|
|
Test Project continues to do pioneering computational research
|
|
in the field of Submandibular Morphology.
|
|
In recent months we have discovered over 17 new varieties of Frombats.
|
|
|
|
Our records show that you created a Test Project account
|
|
on <create_time/> but that your computer hasn't completed any work.
|
|
Quite possibly you encountered problems installing or using the software.
|
|
Many of these problems have now been fixed,
|
|
and we encourage you to visit <a href=http://a.b.c>our web site</a>,
|
|
download the latest version of the software, and try again.
|
|
|
|
To not receive future emails from Test Project, visit
|
|
<opt_out_url/>"
|
|
)."
|
|
");
|
|
list_item("email_failed_subject", "Subject line sent to failed users.
|
|
Example: 'Test Project News'.
|
|
");
|
|
list_item("lapsed_html", "HTML message sent to lapsed users");
|
|
list_item("lapsed_text", "Text message sent to lapsed users");
|
|
list_item("lapsed_subject", "Subject line sent to lapsed users");
|
|
list_item("current_html", "HTML message sent to current users");
|
|
list_item("current_text", "Text message sent to current users");
|
|
list_item("current_subject", "Subject line sent to current users");
|
|
list_end();
|
|
echo "
|
|
<h3>Testing</h3>
|
|
|
|
<p>
|
|
Test your email before sending it out to the world.
|
|
As distributed, mass_email_script.php has the following
|
|
variables defined near the top:
|
|
<pre>
|
|
\$testing = true;
|
|
</pre>
|
|
Set it to false to actually send emails (rather than just print to stdout).
|
|
<pre>
|
|
\$userid = 1;
|
|
</pre>
|
|
If this is nonzero, email will be sent to the given user ID;
|
|
Otherwise it will be sent to all users.
|
|
<p>
|
|
To start, set \$userid to the ID of your own user record.
|
|
Run the script by typing
|
|
<pre>
|
|
php mass_email_script.php
|
|
</pre>
|
|
It will print (to stdout) the contents of all three email types
|
|
(failed, lapsed, and current).
|
|
Verify that the subject, HTML and text are correct.
|
|
<p>
|
|
Then set \$testing = false and run the script again.
|
|
You'll get three emails; check them.
|
|
<p>
|
|
Then set \$testing = false and \$userid = 0,
|
|
create an empty file called <b>mass_email/log</b> (see below),
|
|
and run the script.
|
|
You'll get voluminous output to stdout, but no emails will be sent.
|
|
Control-C it quickly if you want.
|
|
Make sure that each user is being sent the right type of email.
|
|
<p>
|
|
When you're sure that everything is correct,
|
|
set \$testing = false,
|
|
set <b>mass_email/log</b> to empty,
|
|
and run the script.
|
|
It will now send mass emails.
|
|
Depending on the size of your user table,
|
|
it may take hours or days to complete.
|
|
You can control-C it and restart whenever you want;
|
|
it automatically picks up where it left off (see below).
|
|
|
|
<h3>Checkpoint/restart</h3>
|
|
<p>
|
|
<b>mass_email_script.php</b>
|
|
manages checkpoint/restart when dealing with large numbers of participants.
|
|
Mails are sent in order of increasing user ID.
|
|
The file <b>mass_email/log</b> has a list of IDs that have been processed.
|
|
On startup, the script reads this file, finds the last entry,
|
|
and starts from there.
|
|
|
|
<p>
|
|
If you are starting a mass email from the beginning,
|
|
empty the file <b>mass_email/log</b>; i.e.
|
|
<pre>
|
|
truncate mass_email/log
|
|
</pre>
|
|
|
|
<h2>Reminder emails</h2>
|
|
|
|
<p>
|
|
The script <b>html/ops/remind.php</b> is for sending reminder emails.
|
|
The script categorizes users as follows.
|
|
<ul>
|
|
<li> <b>Failed</b>: the account was created at least 14 days ago,
|
|
has zero total credit,
|
|
and hasn't received a reminder email in 30 days.
|
|
These people typically either had a technical glitch,
|
|
or their hardware and/or preferences didn't allow sending them work,
|
|
or the application crashed on their host.
|
|
The reminder email should direct them to a web page
|
|
that helps them fix these problems.
|
|
<li> <b>Lapsed</b>: the user has positive total credit,
|
|
hasn't done a scheduler RPC in the past 60 days,
|
|
and hasn't been sent a reminder email in the past 30 days.
|
|
They probably stopped running BOINC
|
|
or detached this project.
|
|
The reminder email should gently prod them to
|
|
start running BOINC and attach to this project again.
|
|
</ul>
|
|
The numbers 14, 30, and 60 are all parameters in the script;
|
|
edit it to change them.
|
|
<p>
|
|
To use the script, create the following files in <b>html/ops/reminder_email/</b>:
|
|
";
|
|
list_start();
|
|
list_item("failed_html", "HTML message sent to failed users");
|
|
list_item("failed_text", "Text message sent to failed users");
|
|
list_item("failed_subject", "Subject line sent to failed users");
|
|
list_item("lapsed_html", "HTML message sent to lapsed users");
|
|
list_item("lapsed_text", "Text message sent to lapsed users");
|
|
list_item("lapsed_subject", "Subject line sent to lapsed users");
|
|
list_end();
|
|
echo "
|
|
<p>
|
|
remind.php can be run as often as you like.
|
|
We recommend running it every hours, specifying it as a task in config.xml.
|
|
When it sends email to a user, it stores the time in their database record,
|
|
and won't send them another email for at least 30 days.
|
|
For this reason, it has no checkpoint/restart mechanism.
|
|
|
|
<p>
|
|
The procedure for testing your reminder email is
|
|
similar to that for email newsletters (see above).
|
|
|
|
<h2>Friend-to-friend emails</h2>
|
|
<p>
|
|
The web page ffemail_form.php lets users send emails to their friends.
|
|
To use this feature, you must create the following files in
|
|
<b>html/ops/ffmail/</b>:
|
|
";
|
|
list_start();
|
|
list_item("subject", "The subject line used for friend-to-friend emails");
|
|
list_item("html", "HTML template for friend-to-friend emails");
|
|
list_item("text", "Text template for friend-to-friend emails");
|
|
list_end();
|
|
echo "
|
|
Samples are supplied for each of these.
|
|
The following macros are substituted in the message bodies:
|
|
";
|
|
list_start();
|
|
list_item("<fromname/>", "The name of the sender");
|
|
list_item("<toname/>", "The name of the recipient");
|
|
list_item("<comment/>", "The comment supplied by the sender");
|
|
list_end();
|
|
page_tail();
|
|
?>
|