Fetchmail là một chương trình để lấy email từ các máy chủ từ xa. Hãy tưởng tượng bạn có năm tài khoản email trên năm máy chủ khác nhau. Tất nhiên, bạn không muốn kết nối với từng tài khoản để lấy email của mình. Đây là lúc fetchmail phát huy tác dụng. Nếu bạn có tài khoản người dùng trên máy chủ Linux, bạn có thể khiến fetchmail tải xuống email từ các máy chủ từ xa và đưa chúng vào chỉ một hộp thư (hộp thư của người dùng Linux của bạn), từ đó bạn có thể lấy chúng bằng ứng dụng email của mình (ví dụ: Thunderbird hoặc Outlook).
Hoặc hãy tưởng tượng bạn có một tài khoản email tại một nhà cung cấp không lọc thư rác và vi-rút. Trong trường hợp đó, bạn có thể sử dụng fetchmail để tải thư xuống máy chủ của riêng bạn và chuyển chúng qua các bộ lọc thư rác và vi-rút (ví dụ: SpamAssassin và ClamAV) trước khi tải thư xuống bằng ứng dụng email của bạn.
Tôi sử dụng hệ thống Debian trong hướng dẫn này, trong đó có hai người dùng tên là falko và til tồn tại.
Tiếp theo chúng ta phải tạo tệp cấu hình /etc/fetchmailrc vì chương trình nền fetchmail sẽ không khởi động nếu tệp này không tồn tại. Trong tệp này, chúng ta có thể chỉ định cách daemon fetchmail hoạt động cũng như các chi tiết fetchmail cần biết để truy xuất email từ các tài khoản email nước ngoài.
Giả sử falko có hai tài khoản email mà chúng ta muốn truy xuất email:
Ở đầu tệp, chúng ta có một số tùy chọn chung như set daemon 300 (có nghĩa là fetchmail sẽ truy xuất email sau mỗi 300 giây) để điều khiển hoạt động của chương trình. Ý nghĩa của các tùy chọn trên như sau:
Bạn sẽ nhận thấy rằng các dòng thăm dò có các phần kết thúc khác nhau (ví dụ: nofetchall (mặc định), fetchall, keep, nokeep). Ý nghĩa của chúng như sau:
/etc/fetchmailrc phải có 600 quyền và phải thuộc sở hữu của người dùng fetchmail, vì vậy chúng ta thực hiện như sau:
Cuối cùng, chúng ta có thể khởi động fetchmail:
Fetchmail bây giờ sẽ tải xuống email và đưa chúng vào hộp thư của falko và til (sử dụng MTA). Nó sẽ lặp lại điều này sau mỗi set daemon giây.
Bây giờ chúng ta muốn tạo một file như vậy cho người dùng falko. Hãy đảm bảo rằng bạn đã đăng nhập với tư cách là falko, không phải root! Sau đó, chúng ta thực hiện như sau:
Tệp này trông rất giống với tệp /etc/fetchmailrc từ chương 3.1, tuy nhiên bạn sẽ nhận thấy rằng tôi không sử dụng cụm từ is falko ở đây nữa (vì .fetchmailrc nằm trong homedir của falko, fetchmail biết rằng các thư phải được gửi đến falko). Tất nhiên, bạn vẫn có thể sử dụng is falko tại đây, do đó tệp cũng có thể trông như thế này:
Để tìm hiểu thêm về tất cả các thiết lập cấu hình khả dụng, hãy xem
.fetchmailrc phải có 600 quyền, do đó chỉ falko mới có thể đọc/ghi vào tệp đó:
Vậy là xong. Bây giờ falko có thể bắt đầu quá trình truy xuất bằng cách chạy
hoặc
để hiển thị những gì đang diễn ra.
Tất nhiên, falko không muốn bắt đầu quá trình truy xuất thủ công sau mỗi vài phút, vì vậy chúng tôi tạo một công việc cron cho anh ấy. Vẫn là người dùng falko, chúng tôi chạy
và tạo một công việc cron như thế này (sẽ bắt đầu fetchmail sau mỗi năm phút):
Hoặc hãy tưởng tượng bạn có một tài khoản email tại một nhà cung cấp không lọc thư rác và vi-rút. Trong trường hợp đó, bạn có thể sử dụng fetchmail để tải thư xuống máy chủ của riêng bạn và chuyển chúng qua các bộ lọc thư rác và vi-rút (ví dụ: SpamAssassin và ClamAV) trước khi tải thư xuống bằng ứng dụng email của bạn.
1 Lưu ý sơ bộ
Bạn cần một máy chủ Linux có người dùng hệ thống có thể nhận email, nghĩa là phải cài đặt MTA như Postfix hoặc Sendmail trên hệ thống. Nếu không, fetchmail sẽ không hoạt động, vì nó cố gắng chuyển các email đã tải xuống tới MTA (Postfix, Sendmail, ...) và MTA sẽ chuyển các email đến hộp thư của người dùng (bạn có thể cấu hình hệ thống để bao gồm quét thư rác và vi-rút trong quy trình này, ví dụ như với amavisd-new hoặc procmail, nhưng điều này không được đề cập trong hướng dẫn này).Tôi sử dụng hệ thống Debian trong hướng dẫn này, trong đó có hai người dùng tên là falko và til tồn tại.
2 Cài đặt fetchmail
Để cài đặt fetchmail, tất cả những gì chúng ta phải làm là chạy
Mã:
apt install fetchmail
3 Cấu hình fetchmail
Có hai cách để cấu hình fetchmail. Chúng ta có thể chạy nó như một daemon với một tệp cấu hình toàn cục hoặc chúng ta có thể tạo một công việc cron để chạy fetchmail cùng với các tệp cấu hình cho từng người dùng. Tôi sẽ mô tả cả hai phương pháp ở đây.3.1 Chạy fetchmail như một daemon với một tệp cấu hình toàn cục
Để fetchmail chạy như một daemon, chúng ta phải chỉnh sửa /etc/default/fetchmail và đặt START_DAEMON thành yes:
Mã:
nano /etc/default/fetchmail
Mã:
# Tệp này sẽ được sử dụng để khai báo một số biến cho fetchmail## Bỏ chú thích cho những mục sau nếu bạn không muốn có thông báo nhật ký được bản địa hóa# export LC_ALL=C# Khai báo ở đây nếu chúng ta muốn khởi động fetchmail. 'có' hoặc 'không'START_DAEMON=có
Giả sử falko có hai tài khoản email mà chúng ta muốn truy xuất email:
- Tài khoản đầu tiên: máy chủ pop.someprovider.tld, giao thức POP3, tên người dùng [emailprotected] (đúng, tên người dùng là một địa chỉ email trong trường hợp này), mật khẩu secret.
- Tài khoản thứ hai: máy chủ mail.otherprovider.tld, giao thức POP3, tên người dùng ftimme, mật khẩu verysecurepassword.
- Máy chủ mailin.tillsprovider.tld, giao thức POP3, tên người dùng tbrehm, mật khẩu iwonttellyou.
Mã:
nano /etc/fetchmailrc
Mã:
# /etc/fetchmailrc cho chế độ daemon toàn hệ thống# Tệp này phải là chmod 0600, chủ sở hữu fetchmailset daemon 300 # Nhóm cứ sau 5 phútset syslog # ghi nhật ký qua tiện ích syslogset postmaster rootset no bouncemail # tránh mất mát khi xảy ra lỗi 4xx # mặt khác, lỗi 5xx trở nên # nguy hiểm hơn...#################################################################################################################### Máy chủ đến pool################################################################################################################# Mặc định ===========================================================# Đặt antispam thành -1, vì an toàn hơn nhiều khi sử dụng cùng với# no bouncemailmặc định:hết giờ 300antispam -1batchlimit 100poll pop.someprovider.tld protocol POP3 user "[emailprotected]" ở đó với mật khẩu "secret" là falko ở đâypoll mail.otherprovider.tld protocol POP3 user "ftimme" ở đó với mật khẩu "verysecurepassword" là falko ở đây fetchallpoll mailin.tillsprovider.tld protocol POP3 user "tbrehm" ở đó với mật khẩu "iwonttellyou" là till here keep
- set daemon: Đặt khoảng thời gian thăm dò nền tính bằng giây.
- set syslog: Thực hiện ghi nhật ký lỗi thông qua syslog.
- set postmaster: Cung cấp tên người nhận thư cuối cùng (mặc định: người dùng đang chạy fetchmail, "postmaster" nếu do người dùng root chạy).
- set no bouncemail: Chuyển thư lỗi trực tiếp đến postmaster cục bộ (theo tùy chọn toàn cục "postmaster" ở trên).
- timeout: Thời gian chờ không hoạt động của máy chủ tính bằng giây (mặc định là 300).
- antispam: Chỉ định những gì SMTP trả về được hiểu là các khối chính sách thư rác.
- batchlimit: Chỉ định số lượng tối đa các tin nhắn sẽ được chuyển đến trình lắng nghe SMTP trước khi kết nối bị phá hủy và xây dựng lại một cách có chủ đích (mặc định là 0, nghĩa là không giới hạn).
Bạn sẽ nhận thấy rằng các dòng thăm dò có các phần kết thúc khác nhau (ví dụ: nofetchall (mặc định), fetchall, keep, nokeep). Ý nghĩa của chúng như sau:
- nofetchall: Chỉ lấy tin nhắn mới (mặc định). Nếu không có chỉ định nào khác (ví dụ: fetchall, keep), điều này có nghĩa là nofetchall.
- fetchall: Lấy tất cả các tin nhắn đã xem hay chưa.
- keep: Không xóa các tin nhắn đã xem khỏi máy chủ.
- nokeep: Xóa các tin nhắn đã xem khỏi máy chủ.
Mã:
man fetchmail
Mã:
chmod 600 /etc/fetchmailrc
chown fetchmail /etc/fetchmailrc
Mã:
/etc/init.d/fetchmail start
3.2 Sử dụng tệp cấu hình theo người dùng và chạy fetchmail qua Cron
Thay vì sử dụng tệp cấu hình toàn cục như được trình bày trong chương 3.1, chúng ta có thể sử dụng tệp cấu hình theo người dùng. Những file này phải có tên .fetchmailrc và phải nằm trong homedir của người dùng.Bây giờ chúng ta muốn tạo một file như vậy cho người dùng falko. Hãy đảm bảo rằng bạn đã đăng nhập với tư cách là falko, không phải root! Sau đó, chúng ta thực hiện như sau:
Mã:
cd ~/
vi .fetchmailrc
Mã:
set postmaster falkoset bouncemailpoll pop.someprovider.tld protocol POP3 user "[emailprotected]" there with password "secret"poll mail.otherprovider.tld protocol POP3 user "ftimme" there with password "verysecurepassword" fetchall
Mã:
set postmaster falkoset bouncemailpoll pop.someprovider.tld protocol POP3 user "[emailprotected]" there with password "secret" is falko herepoll mail.otherprovider.tld protocol POP3 user "ftimme" there with password "verysecurepassword" is falko here fetchall
Mã:
man fetchmail
Mã:
chmod 600 ~/.fetchmailrc
Mã:
fetchmail
Mã:
fetchmail -v
Tất nhiên, falko không muốn bắt đầu quá trình truy xuất thủ công sau mỗi vài phút, vì vậy chúng tôi tạo một công việc cron cho anh ấy. Vẫn là người dùng falko, chúng tôi chạy
Mã:
crontab -e
Mã:
*/5 * * * * /usr/bin/fetchmail &> /dev/null
4 Liên kết
- Debian: http://www.debian.org
- Fetchmail: http://fetchmail.berlios.de