Thư PHP không thành công

I migrated an application to a platform without a local transport agent [MTA]. I did not want to configure an MTA, so I wrote this xxmail function to replace mail[] with calls to a remote SMTP server. Hopefully it is of some use.

function xxmail[$to, $subject, $body, $headers]
{
$smtp = stream_socket_client['tcp://smtp.yourmail.com:25', $eno, $estr, 30];

$B = 8192;
$c = "\r\n";
$s = 'myapp@someserver.com';

________số 8

// Envelope
fwrite[$smtp, 'mail from: ' . $s . $c];
  $junk = fgets[$smtp, $B];
fwrite[$smtp, 'rcpt to: ' . $to . $c];
  $junk = fgets[$smtp, $B];
fwrite[$smtp, 'data' . $c];
  $junk = fgets[$smtp, $B];


$visitor_email = $_POST['email'];

$headers = "From: $visitor_emailrn";
mail[$to,$subj,$body,$headers];
0


$visitor_email = $_POST['email'];

$headers = "From: $visitor_emailrn";
mail[$to,$subj,$body,$headers];
1


$visitor_email = $_POST['email'];

$headers = "From: $visitor_emailrn";
mail[$to,$subj,$body,$headers];
2

Việc tôi gặp khó khăn với tập lệnh 'biểu mẫu gửi email' đã xảy ra quá thường xuyên. Mọi thứ hiển thị đúng nhưng email được gửi bởi tập lệnh không bao giờ đến địa chỉ đích

Bài viết này hướng dẫn bạn các bước để khắc phục sự cố

E-mail. lai lịch

email là một trong những hệ thống liên lạc sớm nhất được phát triển trên internet. Mặc dù email vẫn là hệ thống liên lạc phổ biến nhất trên internet, thư rác email đã trở thành một vấn đề lớn

Khoảng 100 tỷ email rác được gửi mỗi ngày [vâng, không phải lỗi đánh máy; 100 tỷ, mỗi ngày. ]. Hơn 94% tất cả các email được gửi là thư rác. Mọi máy chủ email đều nhận được một phần công bằng trong số 100 tỷ đó và phải đối phó với sự tấn công của một lượng thư rác khổng lồ như vậy. Do đó, các máy chủ email [MTA. Mail Transfer Agents] đã trang bị cho mình các phương pháp để xem xét kỹ lưỡng các email và từ chối email nếu nghi ngờ thư là thư rác.

Đây là lý do tại sao tập lệnh của bạn nên soạn email cẩn thận để tránh thư bị từ chối.

Giả mạo trường 'Từ' và địa chỉ nguồn

Một thông điệp email có hai phần. một tiêu đề và chính thông điệp. Tiêu đề chứa một số thông tin nhận dạng. Trường 'Từ' là một trong các trường tiêu đề email. Mục đích của trường 'Từ' là để cho biết ai đã gửi email. Tuy nhiên, người gửi email có thể đặt trường 'Từ' thành bất kỳ địa chỉ nào mà anh ta chọn. Những kẻ gửi thư rác khai thác khía cạnh này của giao thức. Ví dụ: người gửi thư rác có thể gửi email làm cho nó có vẻ như là email đến từ security@bank. com và yêu cầu nạn nhân cung cấp chi tiết đăng nhập ngân hàng. Người gửi thư rác không cần truy cập vào máy chủ ngân hàng để thực hiện việc này. Thêm một “Từ. an ninh@ngân hàng. com” vào email sẽ khiến người dùng nghĩ rằng email đến từ ngân hàng. Để biết chi tiết, hãy xem giả mạo địa chỉ nguồn email

chữa bệnh. chỉ số chống nắng

Khung chính sách người gửi [SPF] đã được giới thiệu để ngăn chặn giả mạo địa chỉ nguồn email. Đây là cách nó làm việc. Giả sử một người gửi thư rác đang gửi cho bạn một tin nhắn giả mạo

  • Máy chủ email của bạn nhận được thư từ người gửi thư rác
  • Máy chủ email tìm kiếm địa chỉ 'Từ' trong tiêu đề email. Giả sử trường 'Từ' là 'bảo mật @ ngân hàng. com’
  • Máy chủ email của bạn yêu cầu bản ghi DNS của ngân hàng. com [nói một cách đơn giản, DNS dùng để phân giải một tên miền như ngân hàng. com đến một địa chỉ IP ]. Bản ghi DNS của miền có thể chứa bản ghi SPF. Các bản ghi SPF sẽ cho biết địa chỉ IP nào có thể gửi email thay cho nó. Hầu hết thời gian, nó sẽ chỉ là máy chủ thư chính [ví dụ. ngân hàng. com trong trường hợp này]. Vì địa chỉ IP của người gửi thư rác khác, email bị từ chối

Hãy tưởng tượng bạn nhận được một cú điện thoại và người gọi nói rằng anh ta đang gọi từ ngân hàng. Bạn có thể xác minh bằng cách tra cứu số điện thoại của cuộc gọi đến trong danh bạ điện thoại. Hệ thống SPF tuân theo cùng một phương pháp

Đặt trường 'Từ' bên phải

Có trường 'Từ' trong các email mà bạn đã gửi qua tập lệnh. Địa chỉ Từ phải thuộc về miền mà bạn đang chạy tập lệnh từ đó. Nếu tập lệnh của bạn đang chạy trên trang web của bạn. com thì địa chỉ Từ phải giống như someone@your-website. com

Mã PHP mẫu


$headers = "From: someone@your-website.com";
mail[$to,$subj,$body,$headers];

Điều gì sẽ xảy ra nếu bạn muốn có một số khác. com là địa chỉ từ? . com để chỉ ra rằng trang web của bạn. com có ​​thể gửi email thay cho người khác. com. Nhìn thấy. openspf. org để biết chi tiết

Trả lời khách truy cập đã gửi biểu mẫu

Khi gửi email từ tập lệnh 'biểu mẫu tới email', sẽ thuận tiện khi có địa chỉ email của khách truy cập trang web trong trường 'Từ'. Bạn có thể trả lời tin nhắn bằng cách chỉ cần nhấn nút 'Trả lời' trong ứng dụng email. Tuy nhiên, điều này có thể dẫn đến việc email không đến được với bạn

Ví dụ: giả sử đây là biểu mẫu gửi mã email


$visitor_email = $_POST['email'];

$headers = "From: $visitor_emailrn";
mail[$to,$subj,$body,$headers];

Bây giờ, nếu ai đó gửi địa chỉ email của họ dưới dạng 'ai đó@a-company. com’, khi máy chủ email nhận được thông báo email này, nó sẽ kiểm tra xem trang web của bạn có thể gửi email thay mặt cho một công ty hay không. com và cuối cùng từ chối email

Giải pháp thay thế phù hợp là sử dụng tiêu đề email 'Trả lời'. Đặt 'Từ' thành địa chỉ thuộc miền trang web của bạn và thêm tiêu đề 'Trả lời' với địa chỉ email của khách truy cập trang web

mã ví dụ


$headers = "From: name@your-website.com";
$headers .= "Reply-To: $visitor_email";
mail[$to,$subj,$body,$headers];

Hãy nhớ rằng bạn cần làm sạch tất cả các giá trị được sử dụng trong thuộc tính tiêu đề của mail[]

Hãy chắc chắn rằng php. ini được cấu hình đúng

Nếu bạn vẫn không nhận được email, vấn đề có thể nằm ở thiết lập PHP. Thư phải được cấu hình trong tệp cấu hình PHP php. ban đầu

Đoạn mã sau hiển thị cấu hình thư PHP điển hình [sử dụng sendmail]

[mail function]
; Setup for Linux systems
sendmail_path = /usr/sbin/sendmail -t
sendmail_from = me@myserver.com

Đoạn mã sau hiển thị cấu hình SMTP trong php. ban đầu

[mail function]
; Setup for Windows systems
SMTP = smtp.my.isp.net
sendmail_from = me@myserver.com

Lưu ý rằng bạn có thể cập nhật php. ini chỉ khi bạn đang chạy máy chủ web của riêng mình. Thay vào đó, nếu bạn đang lưu trữ trang web bằng dịch vụ lưu trữ web, hãy liên hệ với nhà cung cấp dịch vụ để cài đặt php mail ngay

Một tập lệnh đơn giản để kiểm tra cấu hình thư PHP → của bạn

Tải xuống tập lệnh email php này. Chỉnh sửa tệp và cập nhật các biến $from_add và $to_add. [xem hướng dẫn trong mã]. Tải tập lệnh lên trang web của bạn. truy cập trang. Bạn sẽ thấy một nút gửi trên trang. Nhấn nút gửi để gửi email cho chính bạn. Nếu bạn vẫn không nhận được email, hãy nhờ trợ giúp từ nhà cung cấp dịch vụ lưu trữ/quản trị viên mạng của bạn. Chỉ cho họ tập lệnh mẫu này không gửi được email

Tại sao thư PHP bị lỗi?

Ví dụ: có thể do bạn thiếu các thông số cần thiết, có lỗi chính tả trong địa chỉ email của người nhận hoặc cần thiết lập chuyển tiếp SMTP. Out of all the possible options as to why your PHP mail[] isn't sending email, we found that most issues stem from Postfix being configured incorrectly.

Làm cách nào để kiểm tra lỗi thư PHP?

Nhật ký PHP Mail[] để phân tích lỗi .
Mở trình soạn thảo văn bản trên máy tính của bạn, chẳng hạn như Notepad trong Windows
Sao chép dòng sau và dán vào trình soạn thảo văn bản. sendmail_path=/usr/sbin/sendmail -t -i -X ​​thư. đăng nhập. .
Lưu tệp dưới tên php. ban đầu
Tải lên php của bạn

Thư PHP có cần SMTP không?

Giao thức truyền tải đơn giản [SMTP] . Nhưng điều này sẽ chỉ hoạt động đối với các giải pháp giống như localhost hoặc XAMPP vì như chúng tôi đã đề cập, hàm PHP mail[] không hỗ trợ xác thực SMTP và không .

Làm cách nào để kích hoạt chức năng thư trong PHP?

Thay đổi php. .
Mở php của bạn. ini bằng cách sử dụng bên dưới. .
Tìm kiếm [chức năng thư] trong tệp. .
Thêm chi tiết máy chủ thư của bạn vào tệp hoặc trong trường hợp bạn có, bạn có thể thay đổi nó [máy chủ thư có thể là của riêng bạn, tức là. .
Lưu/đóng php. tập tin ini

Chủ Đề