Toon posts:

[PHP/Sendmail] nrcpts=0 bij versturen mail

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hoi, ik heb een klein probleempje met mn server. Het gaat om de mail (Sendmail).

Ik wil met mijn Debian Sarge systeem mail kunnen versturen vanaf de server. Via de shell lukt dit allemaal prima, maar wanneer ik dit via een php-script probeer te doen niet.

De php-code:

code:
1
2
3
<?php
mail("mail@adres", "Test-php", "Test-PHP")
?>


Als ik deze uitvoer, komt er de volgende regel in de log bij:
Aug 23 09:14:00 debian sendmail[31769]: j7N7E0YC031769: from=www-data, size=59, class=0, nrcpts=0, msgid=<200508230714.j7N7E0YC031769@host>, relay=www-data@localhost
Het opvallende hieraan is dat de nrcpts=0 erin staat. Dit staat namelijk (volgens mij) voor no. of recipients, en die heb ik toch wel degelijk opgegeven.

Als ik via de shell de gebruiker www-data een mail laat versturen, dan werkt dit wel, komt de mail aan en staat er in mail.log
Aug 23 09:09:55 debian sendmail[31743]: j7N79toL031743: from=www-data, size=57, class=0, nrcpts=1, msgid=<200508230709.j7N79toL031743@host>, relay=www-data@localhost
Dus nrcpts=1

De koppeling tussen php en sendmail werkt dus wel (of in ieder geval gedeeltelijk), want er komt een melding in het log-bestand.

Wat doe ik fout?

Ik heb de Google- en Got-search gebruikt, maar krijg daarbij geen bevredigend resultaat.

  • MTWZZ
  • Registratie: Mei 2000
  • Laatst online: 13-08-2021

MTWZZ

One life, live it!

Het kan zijn dat er ergens in de aliasing van sendmail iets niet goed zit al is die kans klein omdat je via de shell wel gewoon kan mailen.
Ik zou even controleren of de configuratie van mail in je php.ini wel goed zit.
Anders kun je ook nog proberen op een andere manier mail te sturen met PEAR mail classes oid

Nu met Land Rover Series 3 en Defender 90


Verwijderd

Topicstarter
MTWZZ schreef op dinsdag 23 augustus 2005 @ 10:29:
Het kan zijn dat er ergens in de aliasing van sendmail iets niet goed zit al is die kans klein omdat je via de shell wel gewoon kan mailen.
Ik zou even controleren of de configuratie van mail in je php.ini wel goed zit.
Anders kun je ook nog proberen op een andere manier mail te sturen met PEAR mail classes oid
php.ini verwijst naar /usr/sbin/sendmail en dat is volgens mij de goede locatie. Het probleem met andere manieren van mail versturen is dat ik er niet zo heel veel verstand van heb en dat als het niet werkt, ik niet weet of het probleem nu nog steeds in de combo sendmail/php ligt of aan de instellingen van de nieuwe methode.

  • MTWZZ
  • Registratie: Mei 2000
  • Laatst online: 13-08-2021

MTWZZ

One life, live it!

Als je in je shell dit eens doet:
Bash:
1
2
$> echo "Dit is een test mailtje" > msg
$> /usr/sbin/sendmail mail@adres < msg

Als dit werkt heb ik geen flauw idee waarom het niet vanuit php werkt.

Je kunt trouwens ook nog even proberen de To: header expliciet mee te geven:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
$mail_addy="mail@adres";
$headers = "To: $mail_addy\r\n";
$subject = "Test bericht";
$msg = "Dit is een test bericht\nFoo foo\nbar quux!";

$ret = mail($mail_addy,$subject,$msg,$headers);

if($ret) {
    echo "Mail is verstuurd!";
} else {
    echo "Mail is NIET verstuurd!";
}

Nu met Land Rover Series 3 en Defender 90


Verwijderd

Topicstarter
De eerste methode werkt wel. Het mailtje komt perfect aan. Maar als ik je php-script gebruik, komt het mailtje niet aan en staat er wederom nrcpts=0 in de log. Hij geeft hierbij trouwens ook aan dat de mail niet is verstuurd. Is er ook een manier om de reden van het niet versturen op het scherm te krijg, de foutcode dus?

[ Voor 33% gewijzigd door Verwijderd op 23-08-2005 19:09 ]


  • MTWZZ
  • Registratie: Mei 2000
  • Laatst online: 13-08-2021

MTWZZ

One life, live it!

Tsja je zou kunnen proberen om de error reporting op E_ALL te zetten:
PHP:
1
error_reporting(E_ALL);

Verder zou je nog kunnen kijken of er meer info in je syslogs staat van sendmail zowel als van apache/php
Eventueel zou je sendmail wat beter kunnen laten loggen door het volgende te doen:

1) Zoek in /etc/mail/sendmail.cf naar de regel:
code:
1
O LogLevel=

(Het is een O en geen nul!!)
Het kan zijn dat er al een getal achter staat, dat moet je dan vervangen door 12 (debug)
Als die regel er niet is kun je hem gewoon toevoegen.

2) Sendmail herstarten (/etc/init.d/sendmail restart oid)

Als je nu een mailtje stuurt zou er veel meer info in je syslog moeten staan.

[ Voor 3% gewijzigd door MTWZZ op 24-08-2005 11:05 ]

Nu met Land Rover Series 3 en Defender 90


Verwijderd

Topicstarter
MTWZZ schreef op woensdag 24 augustus 2005 @ 11:05:
Tsja je zou kunnen proberen om de error reporting op E_ALL te zetten:
PHP:
1
error_reporting(E_ALL);
Ik heb in php.ini de error-reporting helemaal open gezet, maar ik krijg geen extra errors te zien. Ik heb ergens gelezen dat je met var_dump() ook de foutmelding te zien krijgt. Als ik var_dump($ret) icm jouw script gebruik, krijg ik de volgende melding:
Mail is NIET verstuurd!bool(false)
Wat zegt dit? Betekent dit dat ik var_dump op deze manier niet kan gebruiken of zegt het iets over een fout in het script.
Verder zou je nog kunnen kijken of er meer info in je syslogs staat van sendmail zowel als van apache/php
Eventueel zou je sendmail wat beter kunnen laten loggen door het volgende te doen:

1) Zoek in /etc/mail/sendmail.cf naar de regel:
code:
1
O LogLevel=

(Het is een O en geen nul!!)
Het kan zijn dat er al een getal achter staat, dat moet je dan vervangen door 12 (debug)
Als die regel er niet is kun je hem gewoon toevoegen.

2) Sendmail herstarten (/etc/init.d/sendmail restart oid)

Als je nu een mailtje stuurt zou er veel meer info in je syslog moeten staan.
Ik heb de LogLevel op 12 gezet, maar de informatie in mijn syslog en mail.log blijft beperkt tot slechts een regel wanneer ik een mailtje verstuur via het script.

[ Voor 6% gewijzigd door Verwijderd op 25-08-2005 12:34 ]


  • MTWZZ
  • Registratie: Mei 2000
  • Laatst online: 13-08-2021

MTWZZ

One life, live it!

var_dump() is om te kijken wat voor type een variabele is en de inhoud van die variabele.
Dit is vooral handig om bijvoorbeeld array's te dumpen e.d.
Wel vaag trouwens dat sendmail niet meer info geeft. Staat er in je syslog nog een limiet op welke messages gelogd worden? Zo ja dan kun je dat ook even aanpassen want ik weet zeker dat sendmail ontzettend veel debug info genereerd.

Nu met Land Rover Series 3 en Defender 90


Verwijderd

Topicstarter
MTWZZ schreef op donderdag 25 augustus 2005 @ 13:19:
var_dump() is om te kijken wat voor type een variabele is en de inhoud van die variabele.
Dit is vooral handig om bijvoorbeeld array's te dumpen e.d.
Ik zag dat sommige mensen het gebruiken om te debuggen, dus ach, why not.
Wel vaag trouwens dat sendmail niet meer info geeft. Staat er in je syslog nog een limiet op welke messages gelogd worden? Zo ja dan kun je dat ook even aanpassen want ik weet zeker dat sendmail ontzettend veel debug info genereerd.
In mijn syslog.conf staat dat hij naar mail.log, mail.err, mail.info en mail.warn logt. Ik kan er niet uit opmaken dat er ergens een limiet staat.

Ik kom trouwens wel deze regel in mail.warn tegen (en iets dergelijks ook nog in andere mail logs):
Aug 25 12:26:30 debian sm-mta[4978]: error: safesasl(/usr/lib/sasl2/Sendmail.conf) failed: No such file or directory

[ Voor 16% gewijzigd door Verwijderd op 25-08-2005 13:42 ]


Verwijderd

Topicstarter
MTWZZ schreef op dinsdag 23 augustus 2005 @ 10:29:
Anders kun je ook nog proberen op een andere manier mail te sturen met PEAR mail classes oid
Om hier nog even op terug te komen. Als ik pear installeer, hoe gebruik ik de mail classes dan om mail te versturen, of neemt deze de standaard php-mailer over?

  • MTWZZ
  • Registratie: Mei 2000
  • Laatst online: 13-08-2021

MTWZZ

One life, live it!

Via de Mail class. Deze class kent verschillende backends waaronder direct met sendmail praten en andere SMTP daemons.

Nu met Land Rover Series 3 en Defender 90


Verwijderd

Topicstarter
MTWZZ schreef op donderdag 25 augustus 2005 @ 14:19:
Via de Mail class. Deze class kent verschillende backends waaronder direct met sendmail praten en andere SMTP daemons.
Stom, die had ik zelf ook wel kunnen vinden. Ik heb even het standaard voorbeeldje geprobeerd, en wat denk je: het werkt! Ik heb de sendmail-backend gebruikt en hij verstuurt de mail zonder problemen. Toch raar dat ie via het normale mail() niet werkt. Als 'mail' namelijk als backend gebruik, komt er in de log opnieuw nrcpts=0 te staan :'(

[ Voor 8% gewijzigd door Verwijderd op 25-08-2005 14:38 ]


  • MTWZZ
  • Registratie: Mei 2000
  • Laatst online: 13-08-2021

MTWZZ

One life, live it!

Ja het is inderdaad vrij vaag maar ik heb ook geen idee waar het aan zou kunnen liggen.
Ik heb er dan ook nog nooit problemen mee gehad.

Nu met Land Rover Series 3 en Defender 90


Verwijderd

Topicstarter
Ik heb nu op een andere machine opnieuw Debian Stable geinstalleerd en hier gaat het wel goed. Dus ik zal toch wel iets raars gedaan hebben. In ieder geval bedankt voor je hulp, want ik ben weer heel wat wijzer geworden. Trouwens, nog een vraag: als ik zover met een pakket helemaal heb zitten klooien dat ik het liefste helemaal opnieuw begin, dus ook de configuratiebestanden helemaal wil verwijderen, hoe kan ik dat met apt het beste regelen? Is dat de optie apt-get remove <pakketnaam> --purge ?

  • MTWZZ
  • Registratie: Mei 2000
  • Laatst online: 13-08-2021

MTWZZ

One life, live it!

Ik heb geen idee ik ben meer van Gentoo en Slackware, ik blijf altijd ver uit de buurt van Debian :D
Ik denk trouwens dat er wel wat over in de manual staat.

[ Voor 23% gewijzigd door MTWZZ op 26-08-2005 12:24 ]

Nu met Land Rover Series 3 en Defender 90

Pagina: 1