Comment configurer un vrai nom de domaine pour l'adresse de l'expéditeur

10

J'ai essayé d'envoyer un e-mail à l'aide de la mail()fonction php , mais cela a échoué, se plaignant qu'un vrai nom de domaine est requis. Ce qui suit est observé dans le maillog:

sendmail 4984 r25984: from = apache, size = 273, class = 0, nrcpts = 1, msgid = <[email protected]>, relay = apache @ localhost
sendmail 4985 r25985: ruleset = check_mail, arg1 =, relay = mydomain.com [127.0.0.1], rejeter = 553 5.5.4 ... Nom de domaine réel requis pour l'adresse de l'expéditeur
sendmail 4984 r25984: [email protected], ctladdr = apache (48/48), delay = 00: 00:01, xdelay = 00: 00: 00, mailer = relay, pri = 30273, relay = [127.0.0.1] [127.0.0.1], dsn = 5.6.0, stat = Erreur de format de données
sendmail 4984 r25984: r25984: DSN: erreur de format de données

cron peut envoyer un e-mail à [email protected] chaque fois qu'il y a un problème avec logrotate. Je ne sais pas pourquoi php est incapable de le faire. J'ai essayé d'apporter des modifications à la configuration par défaut dans `sendmail.mc avec les éléments suivants:

MASQUERADE_AS(`mydomain.com')dnl
FEATURE(masquerade_envelope)dnl
FEATURE(masquerade_entire_domain)dnl
MASQUERADE_DOMAIN(localhost)dnl
MASQUERADE_DOMAIN(localhost.localdomain)dnl
MASQUERADE_DOMAIN(mycom)dnl

Mais cela ne semble avoir aucun effet. L'en-tête de l'adresse dans la fonction de messagerie php a déjà été défini. J'ai également veillé à ce que SELinux httpd_can_sendmailsoit activé. Que dois-je faire d'autre pour faire livrer le courrier?

Débordement de question
la source
Vous avez édité sendmail.mc, changé les lignes localhost.localdomainet localhostquelque chose de significatif et compilé le fichier mc en sendmail.cf?
fboaventura
@fboaventura, non, j'ai commenté les deux lignes en les supprimant dnldevant elles.
Débordement de questions
Pouvez-vous ajouter la partie pertinente de votre script php, où vous invoquez mail()? Et, ce sendmail.mcn'est pas le bon fichier de configuration, ce fichier doit être compilé en sendmail.cfutilisant le m4.
fboaventura
@fboaventura, merci, je sais qu'en ce qui concerne l'exigence de compilation, je peux le faire fonctionner maintenant. Voir ma réponse ci-dessous. Merci pour votre aide :)
Débordement de la question

Réponses:

10

Je pense que je viens de le résoudre. J'ai les éléments suivants dans / etc / hosts :

127.0.0.1 www.mydomain.com test.mydomain.com
127.0.0.1 cdn.mycdn.com
127.0.0.1 localhost.localdomain localhost myserver.com

Ce dont j'ai besoin, c'est de placer myserver.com devant la ligne avec localhost.localdomainafin que sendmail pense qu'il utilise un vrai domaine pour envoyer l'e-mail.

Débordement de question
la source
3
Vous pourriez certainement accepter votre propre réponse, c'est que c'était la solution ... En tant que sidenote, c'est généralement /etc/hosts(avec un "s"), à part ça: bonne réponse!
Lévite
2

Vous devez configurer, dans vos scripts, les en-têtes de votre email pour les avoir From: [email protected].

fboaventura
la source
Désolé, j'aurais dû mentionner que cela a déjà été défini dans les en-têtes.
Débordement de questions
1

Dans votre sendmail.mcajout:

LOCAL_CONFIG
Djmyserver.com

Recompilez sendmail.cf, redémarrez sendmail et vous devriez être OK

adamo
la source
1

Dans mon cas, sur Ubuntu 16.04 sur une instance AWS, il fallait ajouter à /etc/mail/sendmail.mc:

define(`confDOMAIN_NAME', `mydomainname.com')dnl

sur une ligne avant la MAILER_DEFINITIONSligne vers la fin du fichier ET ajoutez la même ligne à la fin de /etc/mail/submit.mc. Tapez ensuite sudo supour les autorisations root et compilez pour configurer avec:

m4 sendmail.mc > sendmail.cf
m4 submit.mc > submit.cf

... puis exitsudo. Enfin, sudo service sendmail restartpour redémarrer sendmail, et à partir de là, des e-mails apparaissaient comme envoyés depuis le nom de domaine. Aucune des autres commandes FEATURE ou MASQUERADE n'était requise, ni aucune entrée dans le /etc/hostsfichier.

Théo d'Or
la source