How do I send e-mail from CGI scripts?
Scripts that run on our Web hosting servers should use the "Sendmail" program to send e-mail. Almost all scripts that send mail have an option to use Sendmail — in fact, it's usually the default.
On this page:
- Path to sendmail
- E-mail script policies
- I'm writing a script. How do I use Sendmail?
- Can I use SMTP instead of Sendmail?
Path to sendmail
If you a script that sends mail, it will probably ask you to enter the "path to Sendmail". On our servers, that path is:
Be sure you understand our bulk mail policies, explained below, before you start sending any mail.
E-mail script policies
We do have some restrictions on the type of e-mail that can be sent from scripts on the server.
It's okay to send e-mail from a script as long as the script can only send messages to you (for example, the results of feedback forms).
However, to prevent strangers from abusing your script to send spam or harass others, you do have to follow specific rules and ask our permission before using scripts that can send e-mail to other people. Our requirements for giving permission are:
- If your script sets a custom "envelope sender" address (aka "return address", "bounce address" or "Return-Path"), that address must end with your domain name. See our page explaining the "Return-Path" for more information.
- The messages you send must not violate our spam policy in any way. In particular, if the script adds the recipient to an ongoing mailing list, it must verify each address using a "confirmed opt-in" or "double opt-in" system, and must maintain records of how each recipient verified the subscription request.
- If the script is not a mailing list system (i.e., it sends one-time messages), it must prevent potential spammers from specifying both the recipient address and any of the message subject or body.
To get approval for a script that sends e-mail to other people, just upload it to your Web site and contact us, telling us the name of the script and asking for permission to use it. If you are using a mailing list you have already compiled, please provide details of how you verified each address.
I'm writing a script. How do I use Sendmail?
The two most common ways for programmers to use Sendmail are this method if the script specifies the destination address on the command line:
/usr/sbin/sendmail -oi -f 'firstname.lastname@example.org' 'email@example.com'
And this method if you want Sendmail to get the destination addresses from the "To", "CC" and "BCC" fields of the message itself:
/usr/sbin/sendmail -oi -t -f 'firstname.lastname@example.org'
For more Sendmail programming information, see the Sendmail documentation.
Can I use SMTP instead of Sendmail?
You should avoid using SMTP mail submission from scripts running on our servers if possible; always use
/usr/sbin/sendmail if the script supports it.
There's a very good reason for this. If you use SMTP, your script will fail to send e-mail if the SMTP server is temporarily unavailable due to scheduled maintenance. That's because SMTP is designed for sending mail between mail servers that know how to try again a few minutes later if the receiving mail server is unavailable, but your script won't know how to do that.
In contrast, Sendmail is designed as a way for scripts to send mail to mail servers. Sendmail accepts the mail from your script, stores it, and tries delivering it to the SMTP server. This normally takes just a fraction of a second, but Sendmail will happily keep trying for as long as necessary to successfully deliver your messages. Using it makes your script much more reliable.
If you do need to use SMTP, see the "Outgoing e-mail settings" section of our e-mail settings page for the necessary settings. But again: you really shouldn't do this. It won't work reliably.