Jak skonfigurować prawdziwą nazwę domeny dla adresu nadawcy

10

Próbowałem wysłać wiadomość e-mail za pomocą mail()funkcji php, ale jakoś się nie udało, narzekając, że wymagana jest prawdziwa nazwa domeny. W maillogu obserwuje się:

sendmail 4984 r25984: from = apache, rozmiar = 273, klasa = 0, nrcpts = 1, msgid = <[email protected]>, przekaźnik = apache @ localhost
sendmail 4985 r25985: zestaw reguł = check_mail, arg1 =, przekaźnik = mojadomena.com [127.0.0.1], odrzucenie = 553 5.5.4 ... Wymagana jest prawdziwa nazwa domeny dla adresu nadawcy
sendmail 4984 r25984: [email protected], ctladdr = apache (48/48), opóźnienie = 00: 00:01, xdelay = 00: 00: 00, mailer = przekaźnik, pri = 30273, przekaźnik = [127.0.0.1] [127.0.0.1], dsn = 5.6.0, stat = Błąd formatu danych
sendmail 4984 r25984: r25984: DSN: Błąd formatu danych

cron może wysyłać wiadomości e-mail na adres zewnę[email protected], ilekroć wystąpi problem z logrotate. Nie jestem pewien, dlaczego php nie może tego zrobić. Próbowałem wprowadzić zmiany w domyślnej konfiguracji w `sendmail.mc za pomocą:

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

Ale to nie wydaje się mieć żadnego efektu. Nagłówek z adresu w funkcji poczty php został już ustawiony. Upewniłem się również, że SELinux httpd_can_sendmailjest włączony. Co jeszcze muszę zrobić, aby dostarczyć pocztę?

Przepełnienie pytania
źródło
Edytowałeś sendmail.mc, zmieniłeś linie localhost.localdomaini localhostna coś znaczącego i skompilowałeś plik mc sendmail.cf?
fboaventura
@fboaventura, nie, odkomentowałem dwie linie, usuwając dnlje przed nimi.
Przepełnienie pytania,
Czy możesz dodać odpowiednią część skryptu php, do którego się wywołujesz mail()? I sendmail.mcnie jest to właściwy plik konfiguracyjny, ten plik musi zostać skompilowany sendmail.cfprzy użyciu m4.
fboaventura
@fboaventura, dzięki, wiem, że jeśli chodzi o wymóg kompilacji, jestem w stanie zacząć działać. Zobacz moją odpowiedź poniżej. Dzięki za pomoc :)
Pytanie Przepełnienie

Odpowiedzi:

10

Myślę, że właśnie to rozwiązałem. Mam następujące pliki / 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

Potrzebuję umieścić myserver.com przed linią localhost.localdomain, aby sendmail pomyślał, że używa prawdziwej domeny do wysłania wiadomości e-mail.

Przepełnienie pytania
źródło
3
Możesz definitywnie zaakceptować własną odpowiedź, że to było rozwiązanie ... Jako sidenote zwykle jest to /etc/hosts(z „s”), inne niż: dobra odpowiedź!
Levite
2

Musisz skonfigurować w swoich skryptach nagłówki wiadomości e-mail From: [email protected].

fboaventura
źródło
Przepraszam, powinienem wspomnieć, że zostało to już ustawione w nagłówkach.
Przepełnienie pytania,
1

W swoim sendmail.mcdodaniu:

LOCAL_CONFIG
Djmyserver.com

Ponownie skompiluj sendmail.cf, uruchom ponownie sendmaila i powinieneś być OK

adamo
źródło
1

W moim przypadku na Ubuntu 16.04 w instancji AWS potrzebne było dodanie /etc/mail/sendmail.mc:

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

na linii przed MAILER_DEFINITIONSlinią na końcu pliku, ORAZ dodaj tę samą linię na końcu /etc/mail/submit.mc. Następnie wpisz sudo suuprawnienia roota i skompiluj, aby skonfigurować z:

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

... następnie exitsudo. Wreszcie, sudo service sendmail restartaby ponownie uruchomić sendmail, i od tego momentu wiadomości e-mail pojawiały się jako wysłane z nazwy domeny. Żadne inne polecenie FEATURE ani MASQUERADE nie były wymagane, ani wpis w /etc/hostspliku.

Theo d'Or
źródło