Archive for the ‘Postfix’ tag
Postfix with Dovecot results in MySQL Access denied
While installing a new mail server i ran into a problem with SMTP authentication. The mail server in question is postfix installed on a Debian lenny box. The backend for postfix is MySQL. And because SASL is always a pain to configure i used dovecot to do the SMTP authentication with the MySQL backend. This however resulted in the following error
Jun 21 17:43:02 ims1 dovecot: auth-worker(default): mysql: Connect failed to localhost (mail): Access denied for user ‘mail_admin’@'localhost’ (using password: YES) – waiting for 1 seconds before retry
It took me a while to figure this out. The settings in ‘dovecot-sql.conf’ were correct. Logging in with the same data from a shell went without a problem. I remembered i had this problem some years ago. With a vpopmail setup. The problem then was the encryption algorithm used by MySQL. So i tried to use the older encryption algorithm.
SET PASSWORD FOR ‘user’@'localhost’ = OLD_PASSWORD(‘password’);
After a restart everything was fine.
Jun 21 18:41:03 ims1 dovecot: auth-worker(default): mysql: Connected to localhost (mail)
Like i said it took me a while to figure out. So maybe i can safe somebody some time.
Making PHP mail work on Ubuntu through Postfix
While writing a small mail application in PHP i noticed i couldn’t send mail from my local machine. Even with telnet i couldn’t send out emails. I quickly found out that postfix and sendmail on the same system is not a good idea. Seems it was a left over from some testing i did. So after wiping sendmail and postfix from the system. And reinstalling only postfix i got an error when starting Postfix
postfix: fatal: /etc/postfix/postfix-script: No such file or directory
So let’s try and completely remove the postfix package and purge all files.
$ sudo dpkg –remove postfix
$ sudo dpkg –purge postfix
And a clean install of postfix:
$ sudo apt-get -V install postfix
Now i can telnet in and try to send some mail. And this seemed to work. The mail got delivered.
$ telnet localhost 25
Trying 127.0.0.1…
Connected to localhost.
Escape character is ‘^]’.
220 0×0 ESMTP Postfix (Ubuntu)helo test.nl
250 0×0
mail from: t...@test.nl
250 2.1.0 Ok
rcpt to: some@working.address
250 2.1.5 Ok
data
354 End data with
testing
.
250 2.0.0 Ok: queued as ED97311C412F
So now let’s make sure it also works from PHP. I tested it through a CLI script and through apache2. With the most basic mail script you can imagine.
mail('some@working.address', 'test', 'test message');
The mail however gets bounced.
Jan 7 22:31:48 0×0 postfix/pickup[10249]: 035BF11C4133: uid=1 from=
Jan 7 22:31:48 0×0 postfix/cleanup[11726]: 035BF11C4133: message-id=<20090107213148.035BF11C4133@0x0>
Jan 7 22:31:48 0×0 postfix/qmgr[10250]: 035BF11C4133: from=<dae...@internal.name>, size=303, nrcpt=1 (queue active)
Jan 7 22:31:48 0×0 postfix/smtp[11728]: 035BF11C4133: to=, relay=working.mail.server[xx.xxx.xx.xx]:25, delay=0.68, delays=0.02/0/0.48/0.18, dsn=5.0.0, status=bounced (host working.mail.server[xx.xxx.xx.xx] said: 553 sorry, your envelope sender domain must exist (#5.7.1) (in reply to MAIL FROM command))
Jan 7 22:31:48 0×0 postfix/cleanup[11726]: C5C2911C4134: message-id=<20090107213148.C5C2911C4134@0x0>
Jan 7 22:31:48 0×0 postfix/qmgr[10250]: C5C2911C4134: from=<>, size=2064, nrcpt=1 (queue active)
Jan 7 22:31:48 0×0 postfix/bounce[11729]: 035BF11C4133: sender non-delivery notification: C5C2911C4134
Jan 7 22:31:48 0×0 postfix/qmgr[10250]: 035BF11C4133: removed
Jan 7 22:31:49 0×0 postfix/smtp[11728]: C5C2911C4134: to=<dae...@internal.name>, relay=working.mail.server[xx.xxx.xx.xx]:25, delay=0.75, delays=0.01/0/0.41/0.34, dsn=2.0.0, status=sent (250 ok 1231363909 qp 10204)
Jan 7 22:31:49 0×0 postfix/qmgr[10250]: C5C2911C4134: removed
From looking at the log files i can tell it bounced because the from address is set to dae...@internal.name. And internal.name is not known by my mail server. Let’s try that again. But this time specifically set the FROM header.
$headers .= 'To: Name ' . "\n";
$headers .= 'From: test ' . "\n";
mail('some@working.address', 'test', 'test message', $headers);
The result is the same. The FROM header didn’t change at all. So although it’s possible to set the from header. The message is always send by a system user.. So after doing some research on Google about this problem it seems possible to pass an extra parameter to the mail() function. This parameter can contain a string which will be passed to the postfix binary as an extra parameter. So adding -fsome@orking.address makes the problem go away.
Jan 7 22:36:58 0×0 postfix/pickup[10249]: 687CA11C4133: uid=1 from=
Jan 7 22:36:58 0×0 postfix/cleanup[11847]: 687CA11C4133: message-id=<20090107213658.687CA11C4133@0x0>
Jan 7 22:36:58 0×0 postfix/qmgr[10250]: 687CA11C4133: from=, size=276, nrcpt=1 (queue active)
Jan 7 22:36:59 0×0 postfix/smtp[11849]: 687CA11C4133: to=, relay=working.mail.server[xx.xxx.xx.xx]:25, delay=1.4, delays=0.02/0/0.59/0.76, dsn=2.0.0, status=sent (250 ok 1231364219 qp 10582)
Jan 7 22:36:59 0×0 postfix/qmgr[10250]: 687CA11C4133: removed
But this would mean that i always have to pass the extra parameter. And if i use a third party class or function. i may not be able to do so without hacking the code. So although it solves the problem it’s not the final solution. After i bit of browsing i found out that changing the myorigin parameter in /etc/postfix/main.cf to a known mail server. I could start the send out mail. So i changed it to the domain my mail server runs under.
myorigin = mail.server
And now sending mail from PHP works.






