Vraag php mail () functioneert pijnlijk langzaam op de lokale ontwikkelingsmachine


Achtergrond: als u een lokale apache-server hebt opgezet voor ontwikkelingsdoeleinden, is het probleem mogelijk opgetreden waarbij sendmail lang (minimaal één minuut) e-mails verzendt. Dit is uiterst frustrerend als u een probleem probeert te debuggen met een e-mail die u hebt gegenereerd.

Er zijn verschillende forumberichten op internet die dit probleem bespreken. Echter, geen van de thema's beschreven wat te doen in voldoende detail voor mijn beperkte kennis. Dit zijn de stappen die voor mij hebben gewerkt:

1) vind uw hostnaam (in het geval u het bent vergeten) met behulp van deze opdracht:

:~$ cat /hosts/hostname

myhostname

2) bewerk het bestand /etc/hosts en zorg ervoor dat de eerste regel de volgende is:

127.0.0.1 localhost.localdomain localhost myhostname

3) bewerk het configuratiebestand van sendmail ( /etc/mail/sendmail.cf in Ubuntu) en Maak een commentaar van de lijn #O HostsFile=/etc/hosts

4) Start de computer opnieuw op. De computer zou nu veel sneller moeten opstarten en de functie mail () zou vrijwel onmiddellijk moeten terugkeren. ECHTER worden de e-mails pas verzonden als u stap 5 volgt.

5) U moet de sendmail '-f' optie opnieuw gebruiken wanneer u de mailfunctie gebruikt. Bijvoorbeeld:

mail('recipient@somewhere.com', 'the subject', 'the message', null, '-fsender@somewhere.com');

Mijn vraag voor mijn collega-serverfaulters is:

Welke verdere wijzigingen kunnen worden aangebracht zodat ik de optie sendmail -f niet hoef te gebruiken? Hoewel het niet moeilijk is om de optie -f toe te voegen, is het een probleem wanneer uw CMS (zoals Drupal) de optie -f niet gebruikt bij het verzenden van e-mail. Je zou een kernmodule moeten hacken om deze optie toe te voegen.


20
2017-08-24 03:15


oorsprong


op mijn Ubuntu-systeem is het commando cat /etc/hostname - zkent


antwoorden:


Nou ik weet dat dit niet is wat je vraagt, maar waarom probeer je Postfix of Exim niet? Ze zijn allebei beschikbaar voor ubuntu (Postfix is ​​zelfs de standaard mta op Ubuntu-systemen) en ze bieden allebei een compatibele 'sendmail'-opdracht die heel goed werkt. IMHO sendmail is een beetje gedateerd en je krijgt betere kansen op ondersteuning met modernere MTA.


6
2017-08-24 04:12



Zelfs als er betere mailsystemen zijn dan sendmail, is het een kwestie van een ontwikkelserver die de productieserver weerspiegelt. sendmail is de standaard e-mailagent voor php. - Michael B
Je bedoelt sendmail de software of sendmail het binaire bestand? Omdat Exim en Postfix ook de sendmail binair bestand dat dezelfde opties accepteert als de originele sendmail, voor compatibiliteitskwesties. - coredump
Ik ben niet echt een fan van Exim van eerdere ervaringen, maar gaf Postfix een kans en loste w / e problemen op die we met Sendmail onmiddellijk hadden! - quickshiftin


Dit werkte voor mij:

  • Postfix installeren

Bekijk hier instructies over hoe u dit hier kunt doen: https://help.ubuntu.com/community/Postfix (Mogelijk is het al geïnstalleerd en is het binaire bericht 'sendmail' mogelijk een alias voor postfix)

  • Volg de instructies hier:

http://lenss.nl/2009/01/making-php-mail-work-on-ubuntu-through-postfix/

mkfifo /var/spool/postfix/public/pickup

Vind de sendmail werkwijze

ps aux | grep mail

Dood het

kill <thepid>

Herstarten postfix

/etc/init.d/postfix restart

Ik denk dat je de parameter 'myorigin' gewoon kunt instellen voor elke actieve domeinnaam, zoals een domeinnaam waarvan je de eigenaar bent.


1
2018-01-13 05:04



Perfect! Heeft dit mij na ongeveer twee uur geplaagd. =) - Heanz


Door het netwerkverkeer te bekijken (denk tcpdump) of door een strace op uw sendmail- of apache-processen zou u een idee moeten kunnen krijgen waarom die vertraging is er, zodat je het wortelprobleem kunt oplossen.

Meestal zijn vertragingen in dat bereik het gevolg van falende DNS-zoekopdrachten, maar je weet het niet voordat je eruitziet. Tenzij je het onderliggende probleem oplost, zal het waarschijnlijk een probleem worden, hoe je het ook probeert te omzeilen.


0
2017-08-24 04:27



De vertraging werd veroorzaakt doordat de hostnaam een ​​enkel woord was in plaats van een FQDN (fully qualified domain name). Door sendmail naar / etc / hosts te wijzen en localhost.domein als eerste domeinnaam te hebben (wat een FQDN is) is er geen vertraging. Dit werd opgelost in stappen 1-4. Het resterende probleem is het gebruik van '-f' - nog steeds een grote verbetering van 2 minuten wachten op het verzenden van e-mail. - Michael B


Ik heb nog nooit een probleem gevonden met het gebruik van mail () in PHP dat niet het resultaat was van een probleem met de MTA.

In uw php.ini-bestand wordt getoond welke opdracht wordt uitgevoerd om een ​​e-mail te verzenden (standaard: "sendmail -t -i"). Probeer een e-mail te verzenden vanaf de opdrachtregel met deze - ik wed dat het traag is.

Gebruikelijke zaken die moeten worden gecontroleerd, zijn of een DNS-server correct is geconfigureerd op het apparaat (en kan alle adressen die in de MTA zijn geconfigureerd) oplossen en dat als een smart relay is geconfigureerd, de naam kan worden omgezet naar een adres waarmee het systeem verbinding kan maken.


0
2017-08-24 12:12





Dit kan al dan niet een oplossing voor u zijn: toevoegen mail.force_extra_parameters = "-fsender@somewhere.com" aan jouw php.ini het dossier. Hiermee wordt PHP automatisch toegevoegd -fsender@somewhere.com als een vijfde parameter voor PHP's mail () functie.

Dat is een hard gecodeerde waarde en alleen van toepassing in php.ini, dus het zal niet erg flexibel zijn, maar misschien werkt het voor u in uw ontwikkelingscase?


0
2017-08-24 12:20