How do I send e-mail from CGI scripts?

This page is showing a generic answer.
To see a more detailed answer customized for you, type your domain name here:

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

If you a script that sends mail, it will probably ask you to enter the "path to Sendmail". On our servers, that path is:

/usr/sbin/sendmail

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:

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 'from-address@example.com' 'to@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 'from-address@example.com'

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 Sendmail if the script supports it.

There's a 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.