J'utilise Sendmail sur un serveur Centos pour envoyer des e-mails pour les scripts PHP, mais le problème est que le courrier est remis à une boîte aux lettres locale sur la machine plutôt que ce qui est spécifié dans les enregistrements MX pour le domaine - qui pointe en fait vers une autre machine que j'utilise pour le courrier électronique.
Je voudrais que sendmail n'essaye pas de livrer localement le courrier pour le domaine pour lequel la machine est configurée, existe-t-il un moyen simple de désactiver la livraison locale?
Le domaine n'est pas dans le fichier local-Host-names.
J'ai déjà fait beaucoup de recherches sur Google et j'ai regardé:
Configuration de Sendmail pour ne pas envoyer de courrier à la machine locale
Désactiver la livraison locale dans Sendmail
Mais soit il n'y a pas de réponse, soit il ne convient pas.
Je ne veux pas relayer vers un autre serveur, je veux juste qu'il envoie du courrier quel que soit le domaine.
Pour donner un exemple:
J'ai deux serveurs, l'un est le serveur de messagerie à mail.example.com et un serveur Web qui est example.com, lorsque j'utilise le service smtp sur le serveur Web, il achemine actuellement le courrier vers une boîte aux lettres locale sur example.com, mais il devrait aller dans les boîtes aux lettres sur mail.example.com
Sortie des retours sendmail -bt:
MODE D'ESSAI D'ADRESSE (l'ensemble de règles 3 N'EST PAS automatiquement appelé) Entrez > 3,0 [email protected] Entrée canonify: info @ exemple. com Entrée Canonify2: info Retours Canonify2: info Retours canonify: info Entrée parse: info Entrée Parse0: info Parse0 renvoie: info Entrée ParseLocal: info ParseLocal renvoie: info Entrée Parse1: info Parse1 renvoie: $ # local $: info analyse renvoie: $ # local $: info
Ce que j'ai fait pour désactiver la livraison locale. J'utiliserai le domaine example.com.
Exigences:
Pas:
vim /etc/mail/sendmail.mc
à la fin:
define(`MAIL_HUB', `example.com.')dnl
define(`LOCAL_RELAY', `example.com.')dnl
et alors:
sendmailconfig (or /etc/mail/make depending on your distro)
service sendmail restart
essai:
echo -e "To: [email protected]\nSubject: Test\nTest\n" | sendmail -bm -t -v
echo -e "To: user\nSubject: Test\nTest\n" | sendmail -bm -t -v
Vous devriez le voir se connecter au serveur Google, puis vous devriez voir votre courrier être livré dans votre boîte de réception Google.
Grâce au sporker et à Pawel, vous m'avez mis dans la bonne direction pour résoudre ce problème.
Mon problème d'origine était que sendmail considérait mes comptes de messagerie example.com de domaine comme des comptes locaux.
Ces liens se sont révélés très utiles: Sendmail vers le domaine local en ignorant les enregistrements MX (partie 2)http://lists.freebsd.org/pipermail/freebsd-questions/2004-September/057382. htmlhttp://objectmix.com/sendmail/367920-sendmail-ignores-mailertable-some-semilocal-domains.html
Mais dans mon cas, en utilisant FreeBSD 8.2, ce qui a vraiment fait l'affaire:
# cd /etc/mail
# vim freebsd.mc
Ajoutez ces deux lignes:
define(`MAIL_HUB', `example.com.')dnl
define(`LOCAL_RELAY', `example.com.')dnl
Juste avant:
MAILER(local)
MAILER(smtp)
# make
--- C'est la sortie ---
cp freebsd.mc Host.example.com.mc
/usr/bin/m4 -D_CF_DIR_=/usr/share/sendmail/cf/ /usr/share/sendmail/cf/m4/cf.m4 Host.example.com.mc > Host.example.com.cf
cp freebsd.submit.mc Host.example.com.submit.mc
/usr/bin/m4 -D_CF_DIR_=/usr/share/sendmail/cf/ /usr/share/sendmail/cf/m4/cf.m4 Host.example.com.submit.mc > Host.example.com.submit.cf
--- Fin de sortie ---
# cp sendmail.cf sendmail.cf.bak
# cp Host.example.com.cf sendmail.cf
# /etc/rc.d/sendmail restart
J'espère que cela vous évitera quelques maux de tête.
Je ne suis pas un utilisateur de sendmail mais je crois que sendmail traitera tous les domaines stockés dans /etc/mail/local-Host-names
en tant que noms de domaine locaux.
Vous pouvez essayer de vider ce fichier, (ne le supprimez pas) et redémarrer sendmail et voir comment vous allez.
MODIFIER
Le nom de fichier que j'ai mentionné est en fait défini dans sendmail.cf
et le vôtre ne doit pas être défini sur local-Host-names
regarder dans /etc/mail/sendmail.cf
pour
# file containing names of hosts for which we receive email
Fw/etc/mail/local-Host-names
Ce ne sont en aucun cas des faits testés mais juste moi qui pense à voix haute.
Je confirme simplement que la réponse de Pawel a résolu mon problème très similaire.
Pour toute personne utilisant FreeBSD mais pas intéressée à s'impliquer trop dans la corvée des fichiers sendmail cf, la séquence suivante est celle que vous utiliseriez pour ajouter les deux lignes dans l'exemple de Pawel:
cd /etc/mail
make conf (generates stock .mc/.cf files with the hostname as part of the
filename - these will NOT be overriten during an upgrade)
vi hostname.mc
(add the two lines to the .mc file right above the last two "MAILER" lines)
make conf
cp hostname.cf sendmail.cf
/etc/rc.d/sendmail restart
Si vous utilisez Cpanel/WHM pour gérer votre serveur, assurez-vous de sélectionner Remote Mail Exchanger dans Cpanel/WHM au lieu de Détecter automatiquement la configuration. Remote Mail Exchanger enverra tous les e-mails via les enregistrements MX, y compris le domaine local. Avec Automatique, les e-mails du domaine local seront directement acheminés localement et ne seront pas envoyés à un serveur externe défini dans les enregistrements MX.
Probablement pas ce que vous voulez, mais SSMTP est très bien pour un serveur sortant uniquement, où vous pouvez spécifier un concentrateur de messagerie.
Ce n'est peut-être pas la solution que vous recherchez, mais si votre problème est que l'utilisateur "admin" ou "root" reçoit beaucoup d'e-mails et une énorme boîte aux lettres, vous pouvez envisager de configurer un travail cron pour effacer la boîte aux lettres sortie chaque semaine, jour, etc.
Nous avions plusieurs serveurs CentOS avec ce problème, mais le problème était que nous voulions parfois lire le courrier car cela peut aider à diagnostiquer parfois divers problèmes.
La solution était de simplement cron job et d'essuyer la boîte de temps en temps.
Si nous trouvions un problème ... nous commentions le travail cron (temporairement) et lisions les journaux et les e-mails pour trouver des indices.
Juste une pensée ... et une solution rapide/facile pour vous.
Sinon, jetez un œil au fichier sendmail.mc et modifiez-le en conséquence.
Mise à jour rapide:
Ce n'est pas exactement ce que vous demandez, mais cela pourrait vous donner quelques idées et aider à vous éclairer:
Je suis personnellement plus un postfix, mais cela ressemble beaucoup à ce que vous avez configuré le serveur d'envoi pour recevoir du courrier pour @ votredomaine.com. S'il existe un sendmail équivalent au mécanisme de transport dans postfix, c'est ce que j'utilise pour acheminer le courrier en interne entre mes serveurs.
Si vous souhaitez renvoyer une erreur lors d'une tentative de livraison à une adresse locale, vous pouvez utiliser le plan d'accès et quelque chose comme:
@your.domain error:nouser 550 No such user here
Si vous souhaitez que les e-mails soient "remis" mais jetés, vous pouvez installer une entrée virtusertable qui alias tout pour "@your.domain
"à dev-null. Il peut être utile de continuer à livrer au moins" root
"localement, car il est souvent le destinataire des rapports par e-mail des tâches cron, etc. Essayez quelque chose comme ceci dans votre virtusertable
:
[email protected] local:root
@your.domain local:dev-null
Avec un dev-null
alias qui redirige les messages vers/dev/null, cela devrait continuer à livrer le courrier racine, mais jeter les messages livrés aux autres utilisateurs.
Il semble que votre ensemble de règles 3 supprime les informations de domaine. J'ai inclus quelques étapes de dépannage générales ci-dessous. Si cela ne fonctionne pas, vous devrez m'envoyer votre sendmail.cf pour y jeter un œil.
À partir de la sortie, example.com est traité comme un domaine local. faire un nslookup:
définir q = mx
domain.com
Si cela donne l'adresse IP de la machine locale, vous devez regarder votre DNS. Regardez également dans/etc/hosts pour vous assurer que domain.com n'est pas répertorié.
Il semble également supprimer le @ domain.com, pourriez-vous essayer avec quelque chose comme [email protected] pour voir s'il le répertorie également en tant que domaine local.
Vérifiez également la valeur Cw dans votre fichier sendmail.cf.
J'ai suivi ces suggestions et j'ai remarqué qu'en ajoutant simplement l'étape mentionnée par Pawel,
"/ etc/hosts définissant example.com assigné à la même adresse IP que ci-dessus", j'ai simplement ajouté l'adresse IP de mon serveur suivie de nom_serveur au /etc/hosts
fichier, et c'est tout.
Cela m'a suffi pour que les e-mails soient acheminés via Google et reviennent à mes e-mails.
Le correctif de Pawel a fonctionné pour moi, mais sendmailconfig n'existait pas sur les centos, j'ai donc dû exécuter
cd /etc/mail
m4 /usr/share/sendmail-cf/m4/cf.m4 sendmail.mc > sendmail.cf
service sendmail restart
pour mettre à jour la configuration