2009-06-18 43 views
28

Đây là kịch bản của tôi:Xử lý email bị trả lại bằng PHP?

Tôi có 2 tài khoản email: [email protected][email protected]

Tôi muốn gửi email cho tất cả người dùng của mình bằng [email protected] nhưng sau đó "trả lời" [email protected] (cho đến đây, tập lệnh PHP của tôi có thể xử lý nó).

Khi, email không thể được gửi đi, nó gửi đến [email protected], thông báo lỗi có thể là 553 (không tồn tại email ...) vv

Câu hỏi của tôi là: Làm thế nào để trực tiếp tất cả các email bị trả lại đó (email không thể gửi) tới [email protected] thông qua tập lệnh xử lý để kiểm tra mã lỗi trả lại?

Tôi nên sử dụng ngôn ngữ lập trình nào cho "tập lệnh xử lý"?

"Kịch bản xử lý" trông như thế nào? Bạn có thể đưa ra một mẫu không?

nói cách khác:

thủ tục tôi nên làm theo để xử lý các email bị trả lại là gì?

Trả lời

7

Tại sao không tạo ra một [email protected] và sử dụng php để read those emails và làm những gì bạn muốn?

Chỉnh sửa Sau nhận xét của bạn: Vui lòng chec liên kết của tôi có một tập lệnh php sẽ hướng dẫn bạn cách mở và hộp email bằng cách sử dụng php và đọc email. Bạn có thể sử dụng tập lệnh này để kiểm tra các thông báo lỗi.

+0

u có nghĩa là, tôi tạo ra một thư mục, lưu trữ tất cả email theo [email protected] Sau đó, viết một tập lệnh php, kiểm tra thư mục đó định kỳ và kiểm tra mã lỗi? –

+0

không ... tạo id mới [email protected] Cung cấp các chi tiết email cho tập lệnh php và làm cho nó chạy định kỳ bằng cách sử dụng cron. PHP có thể được sử dụng để mở các tài khoản pop 3 (kiểm tra mã trên). Không cần lưu trữ email. Kịch bản của bạn nên acutomaticaly mở hộp thư và xử lý các email mới. – Shoban

+0

Đó là lý do tại sao tôi cần một thủ tục, tôi hoàn toàn mới để xử lý điều email bị trả lại này. Tôi thậm chí không thể bắt đầu từ đâu, làm cách nào để "cung cấp chi tiết email cho tập lệnh php"? Tôi cần giúp đỡ ... giúp đỡ tôi ... –

2

Nếu bạn đã thiết lập hộp thư POP3 cho [email protected], bạn có thể sử dụng tập lệnh khách POP3 được viết bằng PHP để truy xuất thư và kiểm tra thư chưa gửi được.

+0

Sory, đây là tùy chọn của tôi .. tôi thực sự không biết bắt đầu từ đâu .. –

5

Để các email bị trả về một địa chỉ thực sự là một emailadress (với các chi tiết đăng nhập, v.v.).

Tạo tập lệnh php chạy x phút (ví dụ với công việc cron). Tập lệnh php này phải làm như sau. - Truy xuất tất cả email từ hộp (sử dụng ví dụ Zend Mail) - Kiểm tra lỗi trong thông báo (ví dụ: bằng cách tìm kiếm nó bằng cụm từ thông dụng) - Làm những gì cần thiết.

Nếu bạn muốn biết cụ thể ai đã trả lại, bạn có thể sử dụng địa chỉ thoát cụ thể của người dùng. (Xem ví dụ this site)

+0

Liên kết của ** Zend Mail ** bị hỏng, ở đây mới link http://framework.zend.com/manual/current/en/modules/zend.mail.introduction.html – Jaider

29

Kịch bản tốt nhất là có thể phân loại các loại thư bị trả lại: mềm, cứng ...

những gì chúng tôi sử dụng là BounceStudio. Bạn cần phải biên dịch nó và thêm các thư viện php ... không khó chút nào. Bạn có phiên bản miễn phí và trả tiền của sản phẩm đó

khi chúng tôi phát hiện các kind of bounce chúng tôi sử dụng PEAR :: MAIL :: MIME để tìm kiếm tiêu đề tùy chỉnh mà chúng tôi đã thêm trước đó vào email, cho phép nói:

X-user-id: XXXXX 
X-campaign-id: YYYYYY 
X-recipient-id: SSSSSSSSS 

theo cách này, chúng tôi có thể biết người nhận thực sự mà chúng tôi đã gửi email đến.

hy vọng điều này sẽ giúp bạn!để bạn có thể giúp tôi đạt tới 500 điểm: P

+1

Vui mừng khi thấy bạn đạt đến 500 :) –

+0

Dường như họ không còn có phiên bản miễn phí nữa. – Bot

+0

họ có phiên bản dùng thử miễn phí: http://www.boogietools.com/Products/Linux/ –

0

Bạn nên xem xét SwiftMailer. Nó hoàn toàn được viết bằng PHP và có hỗ trợ cho các email "bị trả lại". http://swiftmailer.org/

+1

Swift Mailer chỉ có thể nhận trạng thái gửi SMTP, nhưng không thể nhận được trả lời của thư trả lời của máy chủ của người nhận. – Raptor

+1

Để đọc thư bị trả lại bằng php, hãy thử PHPMailer-BMH (Trình xử lý thư bị trả lại) - http://phpmailer.worxware.com/index.php?pg=bmh Đó là một chút lỗi thời, nhưng có thể giúp bạn thực hiện các công cụ cơ bản . Đối với xử lý thư bị trả lại nâng cao, tôi cũng khuyên bạn nên sử dụng BounceStudio. – seven

4

Có thể hơi muộn để trả lời, nhưng bạn luôn có thể thử một cái gì đó mới. Tôi đã có tuần trước một nhiệm vụ như thế này, và sử dụng BOUNCE HANDLER Class, bởi Chris Fortune, mà chops lên thư bị trả lại thành mảng kết hợp - http://www.phpclasses.org/browse/file/11665.html

Điều này sẽ được sử dụng sau khi bạn kết nối với POP3 với một số bưu phẩm để có được các thư bị trả lại từ nó, sau đó phân tích nó thành từng phần với điều này và nếu có trạng thái bạn đã tìm kiếm, hãy thực hiện các hành động cần thiết.

Chúc mừng.

0

Bạn luôn có thể sử dụng một cái gì đó như http://cloudmailin.com để chuyển tiếp email bị trả về tới máy chủ php của bạn qua http. Tuy nhiên bạn có thể tốt hơn với dịch vụ dành riêng để gửi email và sử dụng api của họ để truy xuất chi tiết thư bị trả lại.

0

Tôi đang tìm câu trả lời cho cùng một câu hỏi. Có nhiều phần của câu hỏi và nhiều tùy chọn hơn.

Để xử lý e-mail bị trả về, tôi đã tìm thấy PHP class, hoàn toàn bằng PHP, không cần cài đặt phần mềm bổ sung hoặc biên dịch nếu bạn có trang web được hỗ trợ PHP. Nó rất dễ sử dụng.

Nếu bạn đang sử dụng cPanel hoặc InterWorx/SiteWorx, bạn có thể định cấu hình một số địa chỉ để xử lý các e-mail đã nhận bằng tập lệnh, ví dụ như tập lệnh PHP, lớp được đề cập. Hoặc tất nhiên bạn vẫn có thể tạo tài khoản e-mail thông thường và truy xuất thư thông qua POP3 hoặc IMAP và sau đó giải thích chúng. Tôi nghĩ cái đầu tiên tốt hơn, bởi vì nó trực tiếp, bạn không phải sử dụng các kênh bổ sung, như IMAP. Tất nhiên nếu bạn không thể cấu hình máy chủ mail của bạn, hoặc không biết làm thế nào để làm điều đó, thì trước đây là tốt hơn cho bạn.

Chúc may mắn! :)

0

Trong php email lệnh http://php.net/mail

bạn sử dụng tham số thứ năm và thêm "-f" với nó.

Vì vậy, bạn sử dụng "-f [email protected]" như tham số

các phpList newsletter manager sử dụng này để quản lý bị trả lại.

Khi thư bị trả lại điền vào hộp thư, bạn có thể POP chúng và xử lý chúng. Đó là cách dễ nhất để đối phó với họ, trái ngược với việc xử lý chúng khi họ đến.

0

Đây là giải pháp đóng hộp để xử lý thư bị trả lại bằng IMAP.

Tôi đã thay đổi tiêu đề Đường dẫn trả về của phiên bản Thư của tôi thành thư trả về chuyên dụng @ xxxxxx.chúng tôi

Phương pháp duy nhất dễ dàng đủ để tôi xem xét khả thi là như sau, kiểm tra qua POP3 hộp thư đến chuyên dụng và có thể xử lý từng email dựa trên thông báo nhận được.

$inst=pop3_login('mail.xxxxxx.us','110','[email protected]','pass'); 
$stat=pop3_stat($inst); 
//print_r($stat); 
if($stat['Unread']>0){ 
    echo "begin process<br><br>"; 
    $list=pop3_list($inst); 
    //print_r($list); 
    foreach($list as $row){ 
     if(strpos($row['from'],'MAILER-DAEMON')!==FALSE){ 
      $msg=imap_fetchbody($inst,$row['msgno'],'1'); 
      if(strpos($msg,'550')!==FALSE){ 
       echo "handle hard bounce".$msg."<br><br>"; 
       //WHATEVER HERE TO PROCESS BOUNCE 
      } 
     } 
     else{ 
      $msg=imap_fetchbody($inst,$row['msgno'],'1'); 
      echo "not from my server. could be spam, etc.".$msg."<br><br>"; 
      //PROBABLY NO ACTION IS NEEDED 
     } 
     //AFTER PROCESSING 
     //imap_delete (resource $imap_stream , int $msg_number [, int $options = 0 ]) 
     //commented out because I havent implemented yet. see IMAP documentation 
    } 
} 
else{ 
    echo "no unread messages"; 
} 


//imap_close (resource $imap_stream [, int $flag = 0 ]) 
//commented out because I havent implemented yet. see IMAP documentation. 
//flag: If set to CL_EXPUNGE, the function will silently expunge the mailbox before closing, removing all messages marked for deletion. You can achieve the same thing by using imap_expunge() 




function pop3_login($host,$port,$user,$pass,$folder="INBOX",$ssl=false) 
{ 
    $ssl=($ssl==false)?"/novalidate-cert":""; 
    return (imap_open("{"."$host:$port/pop3$ssl"."}$folder",$user,$pass)); 
} 
function pop3_stat($connection)   
{ 
    $check = imap_mailboxmsginfo($connection); 
    return ((array)$check); 
} 
function pop3_list($connection,$message="") 
{ 
    if ($message) 
    { 
     $range=$message; 
    } else { 
     $MC = imap_check($connection); 
     $range = "1:".$MC->Nmsgs; 
    } 
    $response = imap_fetch_overview($connection,$range); 
    foreach ($response as $msg) $result[$msg->msgno]=(array)$msg; 
     return $result; 
} 
function pop3_retr($connection,$message) 
{ 
    return(imap_fetchheader($connection,$message,FT_PREFETCHTEXT)); 
} 
function pop3_dele($connection,$message) 
{ 
    return(imap_delete($connection,$message)); 
} 
0

Chúng tôi đang sử dụng Procmail để lọc các loại thư này. Sau khi kiểm tra một số giải pháp đã được đề cập ở đây, chúng tôi đã kết thúc bằng một công thức Procmail đơn giản để phát hiện thư bị trả lại. Tùy thuộc vào độ chính xác bạn cần, điều này có thể áp dụng cho trường hợp của bạn.

Để biết chi tiết, hãy kiểm tra điều này blog entry.

0

Tôi có cùng một vấn đề, tình huống chính xác. Theo mặc định, máy chủ thư của tôi đang gửi tất cả thư đã trả về của tôi tới cùng một tài khoản mà nó được gửi ban đầu, với thư tự động "Gửi thư không thành công: trả lại thư cho người gửi".

Tôi không thực sự muốn biết tại sao nó được trả lại, có rất nhiều thư giao dịch mà tôi chỉ muốn loại bỏ những cái xấu. Không có thời gian để kiểm tra quy tắc cụ thể như Doestn Exist, Unavailable, vv ,,, Chỉ muốn gắn cờ để xóa và tiếp tục.

Thư bị trả lại quá tầm thường khi bạn cần xử lý nhiều loại máy chủ và phản hồi khác nhau. Mỗi phần mềm chống spam hoặc kịch bản hệ điều hành có thể gửi một mã lỗi khác với email bị trả về.

tôi khuyên bạn nên đọc và tải về phiên bản này cố định sửa lỗi của Xử bật Email - SỬ DỤNG PHPMailer-BMH VÀ AUTHSMTP từ KIDMOSES đây http://www.kidmoses.com/blog-article.php?bid=40 nếu bạn muốn thiết lập IMAP và và gửi tiêu đề tùy chỉnh của riêng bạn, gửi cho bạn [email protected] và sau đó cắt các ngón tay của bạn để xem tập lệnh có bắt được tiêu đề bạn đã gửi được viết bằng thư bị trả lại hay không. Tôi đã thử nó, hoạt động.

Nhưng nếu bạn muốn theo dõi bản sửa lỗi nhanh chóng và dễ dàng của tôi đã giải quyết được vấn đề của tôi, đây là bí mật.

1 - Tải về phiên bản tốt hơn từ trang web KIDMOSES hoặc từ trang web của tôi, chỉ trong trường hợp KIDMOSES muốn di chuyển ở một nơi khác http://chasqui.market/downloads/KIDMOSES-phpmailer-bmh.zip

2 - Các biến có chứa nội dung của email trở lại của bạn là $ cơ thể và bản thân chứa email trả về không hợp lệ (SO ITS AN ARRAY MULTIDIMENSIONAL ARRAY). (Cũng chứa các thư của máy chủ và các thư DNS khác của bạn, nhưng chúng tôi đang tìm kiếm BAD MAIL BOUNCED.)

3 - Vì DỊCH VỤ RIÊNG của bạn đang gửi lại cho bạn email bị trả về, nó không thể thay đổi định dạng của nó trong trường hợp của tôi luôn là mẫu định dạng giống nhau. (Trừ khi bạn thay đổi hệ thống hoặc nhà cung cấp)

4 - Chúng tôi xem xét rằng $ body và tìm kiếm tất cả biến chuỗi email và trích xuất chúng định vị chúng thành một mảng hai chiều hai chiều được gọi là $ khớp với

5 - Chúng tôi chọn vị trí mảng, bằng cách in mảng bằng cách sử dụng print_r (mảng_values ​​($ đối sánh));

6 - Đây là mã mà bạn cần sửa đổi. Dòng 500 của nó từ class.phpmailer-bmh.php tệp

// process bounces by rules 
    $result = bmhDSNRules($dsn_msg,$dsn_report,$this->debug_dsn_rule); 
} elseif ($type == 'BODY') { 
    $structure = imap_fetchstructure($this->_mailbox_link,$pos); 
    switch ($structure->type) { 
    case 0: // Content-type = text 
     $body = imap_fetchbody($this->_mailbox_link,$pos,"1"); 
     $result = bmhBodyRules($body,$structure,$this->debug_body_rule); 

     //MY RULE IT WORKS at least on my return mail system.. 
     $pattern = '/[a-z0-9_\-\+][email protected][a-z0-9\-]+\.([a-z]{2,3})(?:\.[a-z]{2})?/i'; 
     preg_match_all($pattern, $body, $matches); 
     //print_r(array_values($matches));  //To select array number of bad returned mail desired, usually is 1st array $matches[0][0]   
     echo "<font color = red>".$matches[0][0]."</font><br>"; 
     break; 

Vì vậy, chúng tôi quên tiêu đề trả về và tập trung vào email xấu. Bạn có thể vượt trội chúng, bạn có thể MySQL chúng, hoặc xử lý bất cứ điều gì bạn muốn làm.

QUAN TRỌNG Nhận xét echos trong callback_echo.php trong thư mục mẫu nếu không bạn sẽ nhận được tất cả rác trước khi in.

function callbackAction ($msgnum, $bounce_type, $email, $subject,  $xheader, $cheader, $remove, $rule_no=false, $rule_cat=false, $rule_msg='', $totalFetched=0) { 
    $displayData = prepData($email, $bounce_type, $remove); 
    $bounce_type = $displayData['bounce_type']; 
    $emailName = $displayData['emailName']; 
    $emailAddy = $displayData['emailAddy']; 
    $remove  = $displayData['remove']; 
    //echo "<br>".$msgnum . ': ' . $rule_no . ' | ' . $rule_cat . ' | ' . $bounce_type . ' | ' . $remove . ' | ' . $email . ' | ' . $subject . ' | '; 
    //echo 'Custom Header: ' . $cheader . " | "; 
    //echo 'Bounce Message: ' . $rule_msg . " | "; 
    return true; 
} 

OUTPUT MY

Connected to: mail.chasqui.market ([email protected]) 
Total: 271 messages 
Running in disable_delete mode, not deleting messages from mailbox 

[email protected] 

... 

[email protected] 

Closing mailbox, and purging messages 
Read: 271 messages 
0 action taken 
271 no action taken 
0 messages deleted 
0 messages moved 
+0

Mặt khác, nếu bạn mua một phần mềm mà @Jason đã đề cập, nó hoạt động khá tốt, chỉ cần kiểm tra và cung cấp cho bạn tất cả các loại lý do chính xác tại sao thư của bạn bị trả về. Cảm ơn Jason: http://www.maxprog.com/site/software/internet-marketing/email-bounce-handler_sheet_us.php –

Các vấn đề liên quan