วิธีกำหนดค่าชื่อโดเมนจริงสำหรับที่อยู่ผู้ส่ง


10

ฉันพยายามส่งอีเมลโดยใช้mail()ฟังก์ชั่นphp แต่มันล้มเหลวอย่างใดบ่นว่าจำเป็นต้องมีชื่อโดเมนจริง ต่อไปนี้เป็นข้อสังเกตใน maillog:

sendmail 4984 r25984: จาก = apache, size = 273, class = 0, nrcpts = 1, msgid = <201.r25@localhost.localdomain>, relay = apache @ localhost
sendmail 4985 r25985: ruleset = check_mail, arg1 = mydomain.com [127.0.0.1], ปฏิเสธ = 553 5.5.4 ... ชื่อโดเมนจริงที่จำเป็นสำหรับที่อยู่ผู้ส่ง
sendmail 4984 r25984: to=external@server.com, ctladdr = apache (48/48) ล่าช้า = 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 = ข้อผิดพลาดของรูปแบบข้อมูล
sendmail 4984 r25984: r25984: DSN: ข้อผิดพลาดการจัดรูปแบบข้อมูล

cron สามารถส่งอีเมลไปที่ external@server.com เมื่อใดก็ตามที่มีปัญหากับ logrotate ฉันไม่แน่ใจว่าทำไม php ไม่สามารถทำได้ ฉันพยายามเปลี่ยนแปลงการกำหนดค่าเริ่มต้นใน `sendmail.mc ด้วยสิ่งต่อไปนี้:

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

แต่ดูเหมือนว่าจะไม่มีผลใด ๆ ตั้งค่าส่วนหัวจากที่อยู่ในฟังก์ชั่นอีเมล php แล้ว ฉันยังมั่นใจว่าhttpd_can_sendmailเปิดใช้งานSELinux แล้ว ฉันต้องทำอะไรอีกเพื่อให้ได้รับจดหมาย


คุณแก้ไขsendmail.mc, เปลี่ยนบรรทัดlocalhost.localdomainและlocalhostสิ่งที่มีความหมายและรวบรวมไฟล์ mc เป็นsendmail.cf?
fboaventura

@ fboaventura ไม่ฉันไม่ใส่เครื่องหมายสองบรรทัดโดยลบdnlต่อหน้าพวกเขา
คำถามล้น

คุณสามารถเพิ่มส่วนที่เกี่ยวข้องของสคริปต์ PHP ของคุณที่คุณจะเรียกmail()? และที่sendmail.mcไม่ได้เป็นแฟ้มการกำหนดค่าที่เหมาะสมไฟล์นี้จะต้องได้รับการเรียบเรียงโดยใช้sendmail.cf m4
fboaventura

@ fboaventura ขอบคุณฉันรู้ว่าเกี่ยวกับข้อกำหนดการรวบรวมฉันสามารถทำงานได้แล้ว ดูคำตอบของฉันด้านล่าง ขอบคุณสำหรับความช่วยเหลือของคุณ :)
คำถามล้น

คำตอบ:


10

ฉันคิดว่าฉันเพิ่งจะแก้ไขมัน ฉันมีสิ่งต่อไปนี้ใน/ 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

สิ่งที่ฉันต้องการคือการวาง myserver.com ไว้ด้านหน้าlocalhost.localdomainเพื่อให้sendmailคิดว่ามันใช้โดเมนจริงเพื่อส่งอีเมล


3
คุณสามารถยอมรับคำตอบของคุณเองได้อย่างแน่นอนนั่นคือทางออก ... ในฐานะที่เป็นไซด์โนทมันมักจะ/etc/hosts(ด้วย "s") นอกเหนือจากนั้น: คำตอบที่ดี!
Levite

2

From: sender@domain.comคุณต้องกำหนดค่าในสคริปต์ของคุณส่วนหัวของอีเมลของคุณที่จะมี


ขออภัยฉันควรระบุว่าสิ่งนี้ได้ถูกกำหนดไว้ในส่วนหัวแล้ว
คำถามล้น

1

ในการsendmail.mcเพิ่มของคุณ:

LOCAL_CONFIG
Djmyserver.com

คอมไพsendmail.cfล์ใหม่เริ่ม sendmail และคุณควรจะตกลง


1

ในกรณีของฉันบน Ubuntu 16.04 บนอินสแตนซ์ของ AWS สิ่งที่จำเป็นคือการเพิ่มไปที่/etc/mail/sendmail.mc:

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

บนเส้นก่อนที่สายไปยังจุดสิ้นสุดของไฟล์และเพิ่มบรรทัดเดียวกันที่ส่วนท้ายของMAILER_DEFINITIONS /etc/mail/submit.mcจากนั้นพิมพ์sudo suสำหรับการอนุญาตรูทและคอมไพล์เพื่อกำหนดค่าด้วย:

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

... แล้วexitsudo ในที่สุดเมื่อsudo service sendmail restartต้องการรีสตาร์ท sendmail และจากนั้นอีเมลก็ปรากฏเป็นส่งจากชื่อโดเมน ไม่จำเป็นต้องมีคำสั่ง FEATURE หรือ MASQUERADE ใด ๆ หรือรายการใน/etc/hostsไฟล์

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.