Thư mục Pickup của Exchange

Neil Hobson

Nếu bạn đã duyệt cấu trúc thư mục được tạo sau khi cài đặt Exchange 2007 thì có thể phát hiện thấy một thư mục có tên Pickup xuất hiện ở một số thư mục bên dưới Exchange gốc. Thư mục này cũng có trong một số phiên bản trước đây của Exchange và chính vì vậy có thể bạn cũng đã biết một chút về nó. Một điểm chung trong sử dụng thư mục này là để test luồng mail mà không cần sử dụng máy khách thư tín. Vấn đề này được thực hiện bằng cách copy các file văn bản đã được định dạng đúng vào thư mục pickup này, sau đó Exchange sẽ xử lý và phân phối chúng như thường lệ. Trong bài này, chúng tôi sẽ giới thiệu cho các bạn về thư mục pickup và cách sử dụng nó để test luồng mail bên trong cơ sở hạ tầng Exchange.

Cấu hình thư mục Pickup

Thư mục pickup không tồn tại một cách đáng cần thiết trong mỗi máy chủ Exchange 2007. Nó thực sự chỉ cần tồn tại trong máy chủ Exchange 2007 chạy role Hub Transport hoặc Edge Transport. Mặc định, thư mục pickup này nằm trong \Program Files\Microsoft\Exchange Server\TransportRoles trong ổ đĩa mà bạn đã cài đặt Exchange, xem trong hình 1.


Hình 1: Vị trí mặc định của thư mục Pickup

Do sự cấu hình của thư mục pickup không giống như những thứ mà bạn cần phải thực hiện nó hàng ngày, nên có thể đoán thư mục này chỉ được cấu hình thông qua Exchange Management Shell. Lệnh cmdlet có thể sử dụng để kiểm tra các thiết lập của thư mục này là Get-TransportServer. Tuy vậy nếu bạn đưa các kết quả của lệnh Get-TransportServer vào trong cmdlet danh sách định dạng (format-list) thì sẽ thấy ở đó có nhiều thuộc tính máy chủ truyền tải và việc tìm các thuộc tính của thư mục pickup nào đó sẽ không dễ dàng chút nào. Cách tốt nhất mà bạn nên thực hiện là lọc ra các kết quả để tìm thuộc tính bắt đầu với chuỗi pickup và vì vậy cmdlet để sử dụng sẽ phải như sau:

Get-TransportServer | fl pickup*

Bạn có thể thấy được các kết quả của cmdlet này trong hình 2 bên dưới.


Hình 2: Các thuộc tính của thư mục Pickup

Có một thứ cần lưu ý đối với lệnh này là máy chủ đang chạy trong ví dụ này đã cài đặt Hub Transport role rồi, chính vì vậy chúng tôi không cần tham chiếu tên máy chủ trong trường hợp này. Bạn cũng nên nhớ rằng nếu cần chạy lệnh này trên một máy chủ điều khiển xa thì bạn cần phải chỉ định tên máy chủ bằng tham số nhận dạng. Cũng vậy, bạn cần phải sử dụng tham số nhận dạng khi sử dụng lệnh Set-TransportServer để thay đổi cấu hình của thư mục pickup.

Chúng ta hãy xem xét đến từng thuộc tính trong hình 2 một cách lần lượt và thảo luận về nhiệm vụ của chúng, tên của các thuộc tính cần phải được giải thích một cách rõ ràng. Trước tiên thuộc tính PickupDirectoryMaxHeaderSize được sử dụng để cấu hình kích thước tối đa của header thư mà máy chủ Exchange 2007 Hub Transport hoặc Edge Transport sẽ chấp thuận. Mặc định, nó được thiết lập là 64KB và chính vì vậy đáp ứng hầu như được các nhu cầu. Tuy vậy nếu bạn cần thay đổi giá trị này thì hãy sử dụng lệnh dưới đây:

Set-TransportServer –Identity {server name} –PickupDirectoryMaxHeaderSize {value}

Tham số {value} có thể được biểu diễn theo kiểu byte đến gigabyte bằng các giá trị chuỗi như 128KB hoặc 1MB.

Tiếp đến thuộc tính ickupDirectoryMaxMessagesPerMinute là thuộc tính sẽ chỉ định tốc độ máy chủ có thể xử lý thư tín từ thư mục pickup như thế nào và có một thiết lập mặc định là 100. Cấu hình mặc định này sẽ đáp ứng đủ cho tất cả nhu cầu luồng thư tín, tuy nhiên nếu bạn viết một ứng dụng có hơn 100 thư tín trên mỗi phút vào thư mục pickup thì cần thay đổi giá trị này. Rõ ràng việc test ở đây rất quan trọng để thấy được cấu hình có hiệu lực hay chưa.

Bạn cũng có thể hạn chế số người nhận đối với mỗi một thư tín đã được áp dụng cho thư mục pickup thông qua thuộc tính PickupDirectoryMaxRecipientsPerMessage. Giá trị mặc định của nó là 100. Nếu bạn đã cấu hình Exchange 2007 trong tổ chức như vậy thì người dùng chỉ có thể gửi một thư tín với một số lượng tối đa nào đó người nhận để bảo đảm hiệu suất hệ thống, bạn cũng nên xem xét đến thiết lập thư mục pickup sao cho phù hợp với giá trị này. Ví dụ, nếu bạn muốn thiết lập số lượng lớn nhất người nhận thư đã được đệ trình cho thư mục pickup là 500 thì nên sử dụng lệnh sau:

Set-TransportServer –Identity {server name} –PickupDirectoryMaxRecipientsPerMessage 500

Cuối cùng là bạn có thể thay đổi vị trí của thư mục pickup bằng việc thay đổi thuộc tính PickupDirectoryPath. Cho ví dụ, có lẽ bạn đã thực hiện một mảng đĩa chuyên dụng trên máy chủ Hub Transport của mình để quản lý các hàng đợi cơ sở dữ liệu và bạn muốn mảng chuyên dụng này cũng quản lý thư mục pickup. Về mặt cá nhân thì tôi thích bảo đảm rằng đường dẫn mặc định đầy đủ nên được duy trì khi chuyển vị trí thư mục vào trong các mảng đĩa khác. Ví dụ, nếu tôi đang chuyển thư mục pickup thành ổ đĩa E: thì tôi cần phải bảo đảm rừng vị trí thư mục pickup cần phải được thiết lập trong thư mục E:\Program Files\Microsoft\Exchange Server\ thông qua cmdlet sau:

Set-TransportServer –Identity {server name} –PickupDirectoryPath “E:\Program Files\Microsoft\Exchange Server\TransportRoles\Pickup”

Bạn có thể sẽ phân vân rằng thư mục pickup nào sẽ được sử dụng cho mục đích bất chính, như việc gửi các thư không mong muốn cũng là một ví dụ. Câu trả lời ở đây là “yes” và chính vì vậy thư mục này cần phải được bảo vệ. Nếu bạn tự tin rằng mình không cần chức năng của thư mục pickup thì có thể vô hiệu hóa nó bằng cách chỉ định đường dẫn thư mục pickup là $null, xem thể hiện trong lệnh bên dưới:

Set-TransportServer –Identity {server name} –PickupDirectoryPath $null

Hãy nhớ rằng thư mục pickup được kích hoạt mặc định trong tất cả các máy chủ Exchange 2007 có cài đặt role Hub Transport hoặc Edge Transport.

Gửi thư tín

Chúng ta đã cấu hình được thư mục pickup bằng các thiết lập yêu cầu của mình, lúc này hãy xem xét cách bạn có thể sử dụng nó như thế nào. Như đã tuyên bố trong phần đầu của bài viết, thư mục pickup được sử dụng để gửi các thư tín thông qua hệ thống Exchange 2007 bằng cách sắp xếp các thư này vào thư mục pickup. Các thư tín này có thể được tạo dưới một trình soạn thảo văn bản đơn giản như Notepad, sau đó được lưu vào thành một file có đuôi mở rộng là .eml, tiếp đến được đặt vào trong thư mục pickup để xử lý. Các nội dung thư phải được định dạng đúng để xử lý. Một ví dụ đơn giản về thư này được chúng tôi đưa ra trong hình 3 bên dưới. Lưu ý rằng tên file ở đây là message.eml. Để Exchange 2007 xử lý đúng thư thì file cần phải có phần mở rộng là .eml.


Hình 3: Một thư mẫu

Chúng ta hãy xem những gì xảy ra khi file thư .eml được copy vào thư mục pickup. Đầu tiên bạn sẽ thấy file .eml được liệt kê ngắn ngọn trong thư mục trước khi nó được đặt lại tên thành message.tmp như trong hình 4 bên dưới. Theo kinh nghiệm của tôi, quá trình này xuất hiện trong khoảng 5 giây đệ trình file cho thư mục. Giả dụ rằng mọi thứ được cấu hình đúng với định dạng của thư thì Exchange sẽ xử lý nó và thư sẽ được phân phối đi đến đúng địa chỉ như những gì bạn thấy trong hình 5. Ở đây bạn có thể thấy file .tmp đã bị khóa và không thể mở thông qua Notepad; những cố gắng để thực hiện điều đó đều gặp phải thông báo lỗi Access Denied.


Hình 4: Chuyển đổi thành file .tmp


Hình 5: Thư được phân phối

Các file .tmp được sẽ tự động bị xóa sạch bởi hệ thống theo một chu kỳ cơ bản. Dịch vụ Microsoft Exchange Transport dường như chịu trách nhiệm cho việc xử lý các thư từ thư mục pickup, chính vì vậy cần tìm hiểu thêm những gì đã xảy ra nếu dịch vụ này bị dừng và khởi động lại trước khi các file .tmp được xóa. Với các file .tmp đang tồn tại trong thư mục pickup, chúng tôi thử dừng và khởi động lại dịch vụ Microsoft Exchange Transport và thấy rằng các file .tmp đang tồn tại đã bị xóa.

Sai định dạng

Vậy điều gì sẽ xảy ra nếu file .eml được định dạng sai? Trong một bài test, chúng tôi sử dụng một file thư .eml gốc và đã xóa dòng đầu tiên (dòng chỉ định người gửi thư). Kết quả thu được là thay vì việc đặt lại tên của file để nó có đuôi mở rộng .tmp sau đó phân phối thư thì Exchange đã đặt lại tên file có đuôi mở rộng là .bad và để lại file này trong thư mục pickup (xem trong hình 6).


Hình 6: Thư lỗi

Thêm vào đó, một log entry ghi sự kiện cũng được ghi vào trong bản ghi sự kiện Application như trong hình 7. Vấn đề này có nguồn gốc từ MSExchangeTransport và event ID là 9010. Phần mô tả khá cụ thể vấn đề nhưng nó không tuyên bố rõ ràng tên file gây ra vấn đề đó. Việc đó nói nên rằng tất cả những gì bạn cần thực hiện là tìm các file có đuôi .bad trong thư mục pickup và kiểm tra chúng để xem tại sao chúng lại bị định dạng như vậy.


Hình 7: Mục bản ghi sự kiện thư lỗi

Một điểm thú vị khác mà chúng tôi muốn đề cập đến ở đây là, không giống như các file .eml, khi một file .bad tồn tại trong thư mục pickup thì nó sẽ không bị xóa sau khi dừng và khởi động lại dịch vụ Microsoft Exchange Transport. Rõ ràng các file này cần phải xóa một cách thủ công khi bạn thấy event ID được liệt kê như trong hình 7 để không tồn tại các file không mong muốn trong thư mục này. Chúng tôi cũng nhắc thêm là sau khi dịch vụ Microsoft Exchange Transport được khởi động lại thì một copy mới event ID 9010 sẽ không được ghi vào bản ghi sự kiện ứng dụng cho tới khi một sự kiện mới của thư lỗi xuất hiện. Đây chính là ưu điểm để ngăn chặn các cảnh báo lỗi mỗi khi dịch vụ Microsoft Exchange Transport được khởi động lại.

Kết luận

Thư mục SMTP Pickup trong máy chủ Exchange 2007 Hub Transport hoặc Edge Transport có thể dễ dàng bị các quản trị viên bỏ sót khi muốn test luồng thư hoặc là có lẽ trong tìm kiếm một phương pháp đơn giản để gửi các thư điện thử mà không có máy khách email. Thực sự cũng đáng để nhắc nhở bản thân mình về việc tồn tại thư mục này và ngược lại nếu bạn quan tâm đến vấn đề bảo mật và không muốn sử dụng nó thì hãy vô hiệu hóa toàn bộ chức năng này.

Thứ Sáu, 02/05/2008 10:59
31 👨 472
0 Bình luận
Sắp xếp theo