Điểm:0

Cách lọc và gửi thư trong Procmail

lá cờ in

Tôi viết lại dòng tiêu đề cho một số thư đến tùy thuộc vào trường ĐẾN::

:0fhw
* ! ^TO_user@domain\.com\>
* ^TO_[^<>@ ]+@domain\.com\>
* ^Chủ đề:\/.+
| /usr/local/bin/formail -I"Subject: [SPAM]$MATCH"

Đoạn mã trên (từ câu hỏi trước đây của tôi procmail viết lại dòng chủ đề nếu người dùng nhận email không khớp với bài kiểm tra) hoạt động hoàn hảo - nếu tôi nhận được thư từ thứ gì đó KHÁC LÀ [email protected], dòng chủ đề được viết lại thành [SPAM] (chủ đề gốc)

Nhưng tôi muốn thực hiện nhiều điều kiện như thế này - khối làm việc, ở trên, sẽ là khối cuối cùng, nhưng trước đó, tôi muốn viết lại dòng chủ đề nếu TO khớp với một địa chỉ khác.

Vì vậy, tôi đã thêm khối này ngay phía trên nó:

:0fh
* ^TO_special@domain\.com
* ^Chủ đề:\/.+
| /usr/local/bin/formail -I"Subject: [SPECIAL]$MATCH"
$DEFAULT

... và cách này hoạt động - các email được gửi tới '[email protected]' sẽ được viết lại dòng chủ đề.

Vấn đề là, Procmail không dừng lại - nó chuyển sang tiếp theo chặn và viết lại nó một lần nữa. Vì vậy, email gửi đến đặc biệ[email protected] viết lại dòng chủ đề của họ thành:

[SPAM] [ĐẶC BIỆT] Dòng chủ đề gốc blah blah

Tại sao lại thế này? Tại sao không $DEFAULT hành động ở cuối khối đầu tiên khiến Procmail tạm dừng xử lý đối với đoạn email đó?

Làm cách nào tôi có thể ghép khối mới và dừng lại xử lý mẩu thư đó và hoàn thành nó?

Điểm:2
lá cờ ar

Các $DEFAULT cuối cùng là một lỗi cú pháp. Bạn không thể chỉ định nhiều hành động trên cùng một công thức.

Những gì bạn có thể làm là chia nó thành hai công thức; hoặc, trong trường hợp này, chỉ cần kết hợp viết lại và gửi.

:0:
* ^TO_special@domain\.com
* ^Chủ đề:\/.+
| /usr/local/bin/formail -I"Subject: [SPECIAL]$MATCH" >>$DEFAULT

Điều này không còn có fh cờ vì chúng tôi muốn đẩy toàn bộ thông báo qua (không chỉ các tiêu đề, mà h thực hiện) và chúng tôi muốn phân phối chứ không phải nắm bắt kết quả của đường dẫn trở lại Procmail (mà f làm).

Điều này giả định rằng $DEFAULT là một tập tin, không phải là một thư mục; và do đó chúng tôi cũng thêm một giây : để chỉ định khóa.

Nếu bạn muốn chỉ định hai hành động trong một tập hợp các điều kiện, bạn có thể sử dụng dấu ngoặc nhọn với nhiều công thức bên trong chúng. Mỗi công thức có thể có 0 hoặc nhiều điều kiện nhưng chỉ có một hành động.

:0
* ^TO_special@domain\.com
* ^Chủ đề:\/.+
{
    :0fhw
    | formail -I"Subject: [SPECIAL]$MATCH"

    :0:
    $DEFAULT
}

nhưng trong trường hợp này đó là một sự phức tạp không cần thiết.

(Có lẽ cũng thành ngữ hơn khi di chuyển ^Chủ đề: điều kiện để thư điện tử công thức mà nó thuộc về một cách logic, nhưng dù sao đây cũng chỉ là một tiếp tuyến.)

Ngoài ra, có lẽ đảm bảo rằng bạn CON ĐƯỜNG là chính xác ngay khi bắt đầu của bạn .procmailrc để bạn có thể tránh đánh vần đường dẫn đầy đủ đến các tiện ích bên ngoài như thư điện tử.

tripleee avatar
lá cờ ar
Vui lòng lưu ý khóa wrt cập nhật ngắn gọn ngay bây giờ. Và cảm ơn vì đã chấp nhận.

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.