eeijlar
October 15, 2008, 7:54pm
#1
Hi,
I have just set up a web site and I am trying to send e-mail from it to users when they register. I am trying to use sendmail to send the e-mail using PHP… However nothing happens when I send the mail. I am not really sure how sendmail actually works without having a mail server something like: smtp.google.com .
Do I have to set up my own web server using postfix to do this?
Any ideas?
/jlar
hcvv
October 16, 2008, 11:15am
#2
A unix/linux programm to send mail is mailx. Read man mailx and you will be flabbergasted. But search for the ‘Sending mail’ and ‘Examples’ chapters.
As you want to use thiss from a script and not interactive, you may have to use a ‘here document’ to privide the contents of your mail. It would then look something like (NOT tested by me)
mailx a@b.c x@y.z <<EOF
Your mail
Thank you for .....
...
...
...
EOF
Hope this helps.
eeijlar
October 16, 2008, 11:33am
#3
Hi,
I got this to work with postfix…
I followed the Perfect Server Setup Guide
The relevant section is included here:
9 Postfix With SMTP-AUTH And TLS
Now let's install Postfix and Cyrus-SASL:
yast2 -i postfix cyrus-sasl cyrus-sasl-crammd5 cyrus-sasl-digestmd5 cyrus-sasl-gssapi cyrus-sasl-otp cyrus-sasl-plain cyrus-sasl-saslauthd procmail
Then we add the system startup links for Postfix and saslauthd and start them:
chkconfig --add postfix
/etc/init.d/postfix start
chkconfig --add saslauthd
/etc/init.d/saslauthd start
Afterwards we create the certificates for TLS:
mkdir /etc/postfix/ssl
cd /etc/postfix/ssl/
openssl genrsa -des3 -rand /etc/hosts -out smtpd.key 1024
chmod 600 smtpd.key
openssl req -new -key smtpd.key -out smtpd.csr
openssl x509 -req -days 3650 -in smtpd.csr -signkey smtpd.key -out smtpd.crt
openssl rsa -in smtpd.key -out smtpd.key.unencrypted
mv -f smtpd.key.unencrypted smtpd.key
openssl req -new -x509 -extensions v3_ca -keyout cakey.pem -out cacert.pem -days 3650
Next we configure Postfix for SMTP-AUTH and TLS:
postconf -e 'mydomain = example.com'
postconf -e 'myhostname = server1.$mydomain'
postconf -e 'mynetworks = 127.0.0.0/8'
postconf -e 'smtpd_sasl_local_domain ='
postconf -e 'smtpd_sasl_auth_enable = yes'
postconf -e 'smtpd_sasl_security_options = noanonymous'
postconf -e 'broken_sasl_auth_clients = yes'
postconf -e 'smtpd_recipient_restrictions = permit_sasl_authenticated,permit_mynetworks,check_relay_domains'
postconf -e 'inet_interfaces = all'
postconf -e 'alias_maps = hash:/etc/aliases'
postconf -e 'smtpd_tls_auth_only = no'
postconf -e 'smtp_use_tls = yes'
postconf -e 'smtpd_use_tls = yes'
postconf -e 'smtp_tls_note_starttls_offer = yes'
postconf -e 'smtpd_tls_key_file = /etc/postfix/ssl/smtpd.key'
postconf -e 'smtpd_tls_cert_file = /etc/postfix/ssl/smtpd.crt'
postconf -e 'smtpd_tls_CAfile = /etc/postfix/ssl/cacert.pem'
postconf -e 'smtpd_tls_loglevel = 1'
postconf -e 'smtpd_tls_received_header = yes'
postconf -e 'smtpd_tls_session_cache_timeout = 3600s'
postconf -e 'tls_random_source = dev:/dev/urandom'
To enable TLS connections in Postfix, edit /etc/postfix/master.cf and uncomment the tlsmgr line so that it looks like this one:
vi /etc/postfix/master.cf
...]
tlsmgr unix - - n 1000? 1 tlsmgr
...]
Now restart Postfix:
/etc/init.d/postfix restart
To see if SMTP-AUTH and TLS work properly now run the following command:
telnet localhost 25
After you have established the connection to your Postfix mail server type
ehlo localhost
If you see the lines
250-STARTTLS
and
250-AUTH LOGIN PLAIN
then everything is fine.
On my system the output looks like this:
server1:/etc/postfix/ssl # telnet localhost 25
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 server1.example.com ESMTP Postfix
ehlo localhost
250-server1.example.com
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-STARTTLS
250-AUTH LOGIN PLAIN
250-AUTH=LOGIN PLAIN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
quit
221 2.0.0 Bye
Connection closed by foreign host.
server1:/etc/postfix/ssl #
Type
quit
to return to the system's shell.
Oddly they left out a way to test it out…
echo "test" | mail -s testsubject me@myemail.com
seems to do the trick…