Tôi đang chuyển thư đến vào tập lệnh PHP, ngay lập tức lưu trữ email RAW trong db db. Nó hoạt động rất tốt, ngoại trừ ~ 0,7% email đến với phần thân thư bị cắt ngắn.
Tôi đã tìm thấy ai đó có email bị lỗi và họ đã gửi email đến tài khoản gmail của tôi VÀ đến máy chủ. Gmail không có vấn đề gì, tôi thấy toàn bộ tin nhắn. Nhưng máy chủ của tôi đã cắt tin nhắn thô như vậy:
Delivered-To: asdasd@gmail.com
Received: by 10.152.1.193 with SMTP id 1csp3490lao;
Mon, 20 Oct 2014 05:33:31 -0700 (PDT)
Return-Path: <sender@test.com>
Received: from vps123.blahblah.com (vps123.blahblah.com. [74.124.111.111])
by mx.google.com with ESMTPS id fb7si7786786pab.30.2014.10.20.05.33.30
for <asdasd@gmail.com>
(version=TLSv1 cipher=RC4-SHA bits=128/128);
Mon, 20 Oct 2014 05:33:30 -0700 (PDT)
Message-ID: <14FBD481E1074C79AF3D@acerDator>
From: =?utf-8?Q?sende=C3=A4r?= <sender@test.com>
To: "test" <test@asdasd.com>
References: <CAEMnOreG=99=qxBdSav5WP303BA@mail.gmail.com>
Subject: Message body will contain only Det h
Date: Mon, 20 Oct 2014 14:33:24 +0200
MIME-Version: 1.0
Content-Type: multipart/alternative;
boundary="----=_NextPart_000_0018_01CFEC72.CE424470"
X-Priority: 3
X-MSMail-Priority: Normal
Importance: Normal
X-Mailer: Microsoft Windows Live Mail 14.0.8117.416
X-MimeOLE: Produced By Microsoft MimeOLE V14.0.8117.416
X-Source:
X-Source-Args:
X-Source-Dir:
Det här är ett flerdelat meddelande i MIME-format.
------=_NextPart_000_0018_01CFEC72.CE424470
Content-Type: text/plain;
charset="utf-8"
Content-Transfer-Encoding: quoted-printable
This email will not be received correctly. EXIM may not handle =
some poorly formed emails. For example ...
Det h=E4r =E4r ett flerdelat meddelande i MIME-format.
... is directly above this quoted-printable wrapper, thanks to the =
Swedish email client Microsoft Windows Live (circa 2009), adding UTF-8 =
chars where there should only be ascii. At least, that's what I think =
the problem is.
------=_NextPart_000_0018_01CFEC72.CE424470--
Máy chủ của tôi cắt tin nhắn ngay trước ký tự nước ngoài đầu tiên. Dữ liệu thô được lưu trữ chứa các tiêu đề, một dòng trống, "Det h" và không có gì khác.
Khi tôi chuyển email ở trên vào tập lệnh PHP trong shell ( /blah/email_in.php < bademail.txt
) và nó sẽ lưu trữ thông điệp một cách hoàn hảo. Vì vậy, tôi không nghĩ rằng tập lệnh của tôi có lỗi, nó lưu STDIN thô một cách chính xác.
Tôi đã sử dụng cPanel để "Đặt địa chỉ mặc định" thành "Chuyển sang chương trình". Tôi không biết liệu cài đặt này có bỏ qua hoàn toàn EXIM hay không, nhưng tôi đã đọc ở đâu đó rằng EXIM xử lý việc vận chuyển đường ống, vì vậy, dự đoán đầu tiên của tôi là EXIM đang xử lý một thông điệp có định dạng kém và làm nghẹt luồng ở ký tự unicode đầu tiên ä .
Để xác nhận điều này, tôi cần một cách để chuyển email INTO EXIM, về cơ bản lừa EXIM nghĩ rằng nó vừa nhận được email khi thực sự nó vừa nhận được một tệp txt. Tôi đã tìm thấy một số hướng dẫn về cách telnet đến cổng 25, v.v., nhưng không có gì có thể bảo vệ các tiêu đề, ranh giới nhiều phần, cũng không có ý nghĩa gì đối với một unix n00b như tôi dựa vào cPanel.
Tôi có đúng về việc EXIM là thủ phạm có khả năng không?
Bất cứ ai cũng có thể đề xuất một cách để kiểm tra điều này, hoặc một cách tiếp cận khác?
Máy chủ của tôi chạy EXIM + Dovecot trên CentOS 6.5.
ps Chỉ có suy nghĩ khác của tôi là để máy chủ lưu trữ thư bình thường và nếu các thư này được lưu trữ chính xác một cách kỳ diệu, hãy sử dụng IMAP để truy xuất / xóa thư thay vì truy cập trực tiếp vào đường ống ... có vẻ kém hiệu quả hơn khi thêm người trung gian IMAP , mặc dù cách tiếp cận này có lẽ mạnh mẽ hơn.