العمل مع الرسائل من الخادم
الحصول على معلومات صندوق البريد
يمكننا الحصول على معلومات عن صندوق البريد مثل عدد الرسائل وحجم الصندوق باستخدام getMailBoxSize و getMailBoxInfo طرق الـ Pop3Client فئة.
- الـ getMailBoxSize الطريقة تُعيد حجم صندوق البريد بالبايت.
- الـ getMailBoxInfo الطريقة تُعيد كائنًا من النوع Pop3MailBoxInfo.
يمكن أيضًا الحصول على عدد الرسائل باستخدام MessageCount خاصية والحجم باستخدام OccupiedSize خاصية الـ Pop3MailBoxInfo فئة. يوضح الكود النموذجي التالي كيفية الحصول على معلومات حول صندوق البريد. يوضح كيفية:
- إنشاء Pop3Client.
- الاتصال بخادم POP3.
- احصل على حجم صندوق البريد.
- احصل على معلومات صندوق البريد.
- احصل على عدد الرسائل في صندوق البريد.
- احصل على الحجم المشغول.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
Pop3Client client = new Pop3Client();
// Specify host, username, password, Port and SecurityOptions for your client
client.setHost("pop.gmail.com");
client.setUsername("your.username@gmail.com");
client.setPassword("your.password");
client.setPort(995);
client.setSecurityOptions(SecurityOptions.Auto);
// Get the size of the mailbox, Get mailbox info, number of messages in the mailbox
long nSize = client.getMailboxSize();
System.out.println("Mailbox size is " + nSize + " bytes.");
Pop3MailboxInfo info = client.getMailboxInfo();
int nMessageCount = info.getMessageCount();
System.out.println("Number of messages in mailbox are " + nMessageCount);
long nOccupiedSize = info.getOccupiedSize();
System.out.println("Occupied size is " + nOccupiedSize);
الحصول على عدد رسائل البريد في صندوق البريد
يوضح المقتطف البرمجي التالي كيفية حساب عدد رسائل البريد الإلكتروني في صندوق البريد.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
Pop3Client client = new Pop3Client("pop3.server.com", "username", "password");
try {
client.setSecurityOptions(SecurityOptions.Auto);
int i = client.getMessageCount();
System.out.println("Message count: " + i);
} catch (Pop3Exception ex) {
System.out.println("Error:" + ex.toString());
}
يتيح Aspose.Email للمطوِّرين التعامل مع رسائل البريد بطرق مختلفة عديدة. على سبيل المثال، يمكنهم استرجاع معلومات الرأس قبل اتخاذ قرار بتنزيل البريد. أو يمكنهم استرجاع رسائل البريد من خادم وحفظها دون تحليلها (أسرع) أو بعد تحليلها (أبطأ). يوضح هذا المقال كيفية استرجاع وتحويل رسائل البريد.
استرجاع معلومات رؤوس البريد الإلكتروني
رؤوس البريد الإلكتروني يمكن أن تزودنا بمعلومات حول رسالة البريد التي يمكننا استخدامها لتحديد ما إذا كنا سنسترجع الرسالة بالكامل أم لا. عادةً، تحتوي معلومات الرأس على المرسل، الموضوع، تاريخ الاستلام، إلخ. (يتم وصف رؤوس البريد الإلكتروني بالتفصيل في تخصيص رؤوس البريد الإلكتروني. هذا الموضوع يتناول بشكل خاص إرسال بريد إلكتروني باستخدام SMTP، لكن معلومات محتوى رأس البريد تظل صالحة لبريد POP3). الأمثلة التالية توضح كيفية استرجاع رؤوس البريد الإلكتروني من خادم POP3 باستخدام رقم تسلسل الرسالة.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
// Create an instance of the Pop3Client class
Pop3Client client = new Pop3Client();
// Specify host, username. password, Port and SecurityOptions for your client
client.setHost("pop.gmail.com");
client.setUsername("your.username@gmail.com");
client.setPassword("your.password");
client.setPort(995);
client.setSecurityOptions(SecurityOptions.Auto);
try {
HeaderCollection headers = client.getMessageHeaders(1);
for (int i = 0; i < headers.size(); i++) {
// Display key and value in the header collection
System.out.print(headers.getKey(i));
System.out.print(" : ");
System.out.println(headers.get(i));
}
} catch (Exception ex) {
System.out.println(ex.getMessage());
} finally {
client.dispose();
}
استرجاع رسائل البريد الإلكتروني
الـ Pop3Client مكوّن الفئة يوفر القدرة على استرجاع رسائل البريد الإلكتروني من خادم POP3، وتحليلها إلى MailMessage مثيل بمساعدة MailMessage المكونات. الـ MailMessage الفئة تحتوي على عدة خصائص وطرق لمعالجة محتوى البريد الإلكتروني. باستخدام fetchMessage طريقة الـ Pop3Client الفئة، يمكنك الحصول على MailMessage المثال مباشرةً من خادم POP3. يوضح المقتطف التالي كيفية استرجاع رسالة بريد إلكتروني كاملة من خادم POP3.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
// Create an instance of the Pop3Client class
Pop3Client client = new Pop3Client();
// Specify host, username, password, Port and SecurityOptions for your client
client.setHost("pop.gmail.com");
client.setUsername("your.username@gmail.com");
client.setPassword("your.password");
client.setPort(995);
client.setSecurityOptions(SecurityOptions.Auto);
try {
int messageCount = client.getMessageCount();
// Create an instance of the MailMessage class and Retrieve message
MailMessage message;
for (int i = 1; i <= messageCount; i++) {
message = client.fetchMessage(i);
System.out.println("From:" + message.getFrom());
System.out.println("Subject:" + message.getSubject());
System.out.println(message.getHtmlBody());
}
} catch (Exception ex) {
System.out.println(ex.getMessage());
} finally {
client.dispose();
}
استرجاع معلومات ملخص الرسالة باستخدام المعرف الفريد
يمكن لعميل POP3 في الـ API استرجاع معلومات ملخص الرسالة من الخادم باستخدام المعرف الفريد للرسالة. يتيح ذلك وصولًا سريعًا إلى معلومات مختصرة عن الرسالة دون الحاجة لاسترجاع الرسالة بالكامل أولاً. يوضح المقتطف التالي كيفية استرجاع معلومات ملخص الرسالة.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
String uniqueId = "unique id of a message from server";
Pop3Client client = new Pop3Client("host.domain.com", 456, "username", "password");
client.setSecurityOptions(SecurityOptions.Auto);
Pop3MessageInfo messageInfo = client.getMessageInfo(uniqueId);
if (messageInfo != null) {
System.out.println(messageInfo.getSubject());
System.out.println(messageInfo.getDate());
}
قائمة الرسائل باستخدام الاتصال المتعدد
Pop3Client يوفر UseMultiConnection خاصية يمكن استخدامها لإنشاء اتصالات متعددة للعمليات الثقيلة. يمكنك أيضًا تحديد عدد الاتصالات التي ستُستخدم أثناء وضع متعدد الاتصالات باستخدام Pop3Client.ConnectionsQuantity. يوضح المقتطف التالي استخدام وضعية الاتصال المتعدد لسرد الرسائل ويقارن أداؤه مع وضعية الاتصال الفردي.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
// Create an instance of the Pop3Client class
Pop3Client pop3Client = new Pop3Client();
pop3Client.setHost("<HOST>");
pop3Client.setPort(995);
pop3Client.setUsername("<USERNAME>");
pop3Client.setPassword("<PASSWORD>");
pop3Client.setConnectionsQuantity(5);
pop3Client.setUseMultiConnection(MultiConnectionMode.Enable);
long multiConnectionModeStartTime = System.currentTimeMillis();
Pop3MessageInfoCollection messageInfoCol1 = pop3Client.listMessages();
long multiConnectionModeTimeSpan = System.currentTimeMillis() - multiConnectionModeStartTime;
pop3Client.setUseMultiConnection(MultiConnectionMode.Disable);
long singleConnectionModeStartTime = System.currentTimeMillis();
Pop3MessageInfoCollection messageInfoCol2 = pop3Client.listMessages();
long singleConnectionModeTimeSpan = System.currentTimeMillis() - singleConnectionModeStartTime;
System.out.println("multyConnectionModeTimeSpan: " + multiConnectionModeTimeSpan);
System.out.println("singleConnectionModeTimeSpan: " + singleConnectionModeTimeSpan);
double performanceRelation = singleConnectionModeTimeSpan / multiConnectionModeTimeSpan;
System.out.println("Performance Relation: " + performanceRelation);
جلب الرسائل من الخادم وحفظها على القرص
حفظ الرسالة إلى القرص بدون تحليل
إذا كنت تريد تنزيل رسائل البريد من خادم POP3 دون تحليلها، استخدم الـ Pop3Client فئة saveMessage الدالة. الـ saveMessage الدالة لا تحلل رسالة البريد لذا فهي أسرع من الـ fetchMessage دالة. يوضح المقتطف البرمجي التالي كيفية حفظ رسالة حسب رقم تسلسلها، في هذه الحالة، الرقم 1. الـ saveMessage الطريقة تحفظ الرسالة بصيغة EML الأصلية دون تحليلها.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
// The path to the File directory.
String dataDir = "pop3/";
String dstEmail = dataDir + "InsertHeaders.eml";
// Create an instance of the Pop3Client class
Pop3Client client = new Pop3Client();
// Specify host, username, password, Port and SecurityOptions for your client
client.setHost("pop.gmail.com");
client.setUsername("your.username@gmail.com");
client.setPassword("your.password");
client.setPort(995);
client.setSecurityOptions(SecurityOptions.Auto);
try {
// Save message to disk by message sequence number
client.saveMessage(1, dstEmail);
client.dispose();
} catch (Exception ex) {
System.out.println(ex.getMessage());
}
System.out.println("Retrieved email messages using POP3 ");
تحليل الرسالة قبل الحفظ
المقتطف البرمجي التالي يستخدم الـ Pop3Client fetchMessage طريقة لاسترجاع رسالة من خادم POP3 حسب رقم تسلسلها، ثم حفظ الرسالة على القرص باستخدام الموضوع كاسم الملف.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
// The path to the File directory.
String dataDir = "pop3/";
// Create an instance of the Pop3Client class
Pop3Client client = new Pop3Client();
// Specify host, username and password, Port and SecurityOptions for your client
client.setHost("pop.gmail.com");
client.setUsername("your.username@gmail.com");
client.setPassword("your.password");
client.setPort(995);
client.setSecurityOptions(SecurityOptions.Auto);
try {
// Fetch the message by its sequence number and Save the message using its subject as the file name
MailMessage msg = client.fetchMessage(1);
msg.save(dataDir + "first-message_out.eml", SaveOptions.getDefaultEml());
client.dispose();
} catch (Exception ex) {
System.out.println(ex.getMessage());
} finally {
client.dispose();
}
جلب رسائل مجموعة
Pop3Client يوفر fetchMessages طريقة التي تقبل iterable من أرقام التسلسل أو المعرف الفريد وتُعيد قائمة بـ MailMessage. يوضح المقتطف البرمجي التالي كيفية استخدام الـ fetchMessages طريقة لجلب الرسائل حسب أرقام التسلسل والمعرف الفريد.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
// Create an instance of the Pop3Client class
Pop3Client pop3Client = new Pop3Client();
pop3Client.setHost("<HOST>");
pop3Client.setPort(995);
pop3Client.setUsername("<USERNAME>");
pop3Client.setPassword("<PASSWORD>");
Pop3MessageInfoCollection messageInfoCol = pop3Client.listMessages();
System.out.println("ListMessages Count: " + messageInfoCol.size());
List<Integer> sequenceNumberAr = new ArrayList<Integer>();
List<String> uniqueIdAr = new ArrayList<String>();
for (Pop3MessageInfo mi : messageInfoCol) {
sequenceNumberAr.add(mi.getSequenceNumber());
uniqueIdAr.add(mi.getUniqueId());
}
for (MailMessage m : pop3Client.fetchMessagesBySequences(sequenceNumberAr)) {
System.out.println("FetchMessages-sequenceNumberAr : " + m.getSubject());
}
for (MailMessage m : pop3Client.fetchMessagesByUids(uniqueIdAr)) {
System.out.println("FetchMessages-uniqueIdAr : " + m.getSubject());
}
تصفية الرسائل حسب المرسل أو المستلم أو التاريخ
الـ Pop3Client الفئة، الموصوفة في الاتصال بخادم POP3، توفر الـ listMessages طريقة التي تسترجع جميع الرسائل من صندوق بريد. للحصول على الرسائل التي تطابق شرطًا ما فقط، استخدم المنهج المتجاوز listMessages طريقة التي تأخذ MailQuery كوسيط. الـ MailQuery الفئة توفر خصائص متنوعة لتحديد شروط الاستعلام، مثل التاريخ، الموضوع، المرسل، المستلم وما إلى ذلك. الـ MailQueryBuilder الفئة تُستخدم لبناء تعبير البحث. أولاً، تُضبط جميع الشروط والقيود ثم MailQuery يُملأ بالاستعلام الذي طوره MailQueryBuilder. الـ MailQuery كائن الفئة يُستخدم بواسطة Pop3Client لاستخراج المعلومات المصفَّاة من الخادم. يوضح هذا المقال كيفية تصفية رسائل البريد من صندوق البريد. يوضح المثال الأول كيفية تصفية الرسائل بناءً على تاريخ وموضوع. نظهر أيضًا كيفية التصفية على معايير أخرى وكيفية بناء استعلامات أكثر تعقيدًا. كما يوضح تطبيق مرشح التاريخ والوقت لاسترجاع رسائل معينة من الصندوق. بالإضافة إلى ذلك، يوضح كيفية تطبيق التصفية الحساسة لحالة الأحرف.
تصفية الرسائل من صندوق البريد
لتصفية الرسائل من صندوق البريد:
- الاتصال وتسجيل الدخول إلى خادم POP3.
- إنشاء نسخة من MailQuery وتعيين الخصائص المطلوبة.
- استدعِ الـ Pop3Client.listMessages(MailQuery query) الطريقة وتمرير الـ MailQuery في الوسائط للحصول على الرسائل المصفاة فقط.
يوضح المقتطف البرمجي التالي كيفية الاتصال بصندوق بريد POP3 والحصول على الرسائل التي وصلت اليوم وتحتوي على كلمة "newsletter" في الموضوع.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
// Connect and log in to POP3
String host = "host";
int port = 110;
String username = "user@host.com";
String password = "password";
Pop3Client client = new Pop3Client(host, port, username, password);
// Set conditions, Subject contains "Newsletter", Emails that arrived today
MailQueryBuilder builder = new MailQueryBuilder();
builder.getSubject().contains("Newsletter");
builder.getInternalDate().on(new Date());
// Build the query and Get list of messages
MailQuery query = builder.getQuery();
Pop3MessageInfoCollection messages = client.listMessages(query);
System.out.println("Pop3: " + messages.size() + " message(s) found.");
الحصول على الرسائل التي تفي بمعايير محددة
نماذج الكود أعلاه تصفية الرسائل بناءً على موضوع البريد وتاريخه. يمكننا استخدام خصائص أخرى لتعيين ظروف مدعومة أخرى كذلك. أدناه بعض الأمثلة على تعيين الشروط باستخدام MailQuery.
المقتطفات البرمجية التالية توضح كيفية تصفية رسائل البريد بناءً على معايير أخرى:
- ابحث عن رسائل البريد التي تم تسليمها اليوم.
- ابحث عن رسائل البريد المستلمة ضمن نطاق.
- ابحث عن رسائل البريد من مرسل محدد.
- ابحث عن رسائل البريد المرسلة من نطاق محدد.
- ابحث عن رسائل البريد المرسلة إلى مستلم محدد.
تاريخ اليوم
يوضح المقتطف البرمجي التالي كيفية العثور على رسائل البريد التي تم تسليمها اليوم.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
// Emails that arrived today
MailQueryBuilder builder = new MailQueryBuilder();
builder.getInternalDate().on(new Date());
نطاق تاريخ
يوضح المقتطف البرمجي التالي كيفية العثور على رسائل البريد المستلمة ضمن نطاق.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
// Emails that arrived in last 7 days
Calendar calendar = Calendar.getInstance();
builder.getInternalDate().before(calendar.getTime());
calendar.add(Calendar.DATE, -7);
builder.getInternalDate().since(calendar.getTime());
مرسل محدد
يوضح المقتطف البرمجي التالي كيفية العثور على رسائل البريد من مرسل محدد.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
// Get emails from specific sender
builder.getFrom().contains("saqib.razzaq@127.0.0.1");
نطاق محدد
يوضح المقتطف البرمجي التالي كيفية العثور على رسائل البريد المرسلة من نطاق محدد.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
// Get emails from specific domain
builder.getFrom().contains("SpecificHost.com");
مستلم محدد
يوضح المقتطف البرمجي التالي كيفية العثور على رسائل البريد المرسلة إلى مستلم محدد.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
// Get emails sent to specific recipient
builder.getTo().contains("recipient");
إنشاء استعلامات معقدة
إذا كان مختلفًا MailQueryBuilder تُضبط الخصائص في عبارات منفصلة، ثم يتم مطابقة جميع الشروط. على سبيل المثال، إذا أردنا الحصول على رسائل بين نطاق تاريخ ومن مضيف محدد، نحتاج إلى كتابة ثلاث عبارات.
دمج الاستعلامات باستخدام AND
يوضح المقتطف البرمجي التالي كيفية دمج الاستعلامات باستخدام AND.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
// Emails from specific host, get all emails that arrived before today and all emails that arrived since 7 days ago
builder.getFrom().contains("SpecificHost.com");
Calendar calendar = Calendar.getInstance();
builder.getInternalDate().before(calendar.getTime());
calendar.add(Calendar.DATE, -7);
builder.getInternalDate().since(calendar.getTime());
دمج الاستعلامات باستخدام OR
MailQueryBuilder توفر الـ أو طريقة تأخذ اثنتين MailQuery كائنات كوسائط. يحصل على الرسائل التي تطابق أي من الشرطين المحددين. يوضح المقتطف البرمجي التالي كيفية تصفية الرسائل التي يحتوي موضوعها على "test" أو أن المرسل هو "noreply@host.com". يوضح المقتطف البرمجي التالي كيفية دمج الاستعلامات باستخدام OR.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
// Specify OR condition
builder.or(builder.getSubject().contains("test"), builder.getFrom().contains("noreply@host.com"));
تطبيق عوامل تصفية حساسة لحالة الأحرف
توفر الـ API أيضًا القدرة على تصفية رسائل البريد من صندوق البريد بناءً على معيار حساس لحالة الأحرف. الطرق التالية توفر القدرة على البحث عن رسائل البريد مع تحديد علامة الحساسية لحالة الأحرف.
- طريقة StringComparisonField.contains(String value, boolean ignoreCase)
- طريقة StringComparisonField.equals(String value, boolean ignoreCase)
- طريقة StringComparisonField.notContains(String boolean, bool ignoreCase)
- طريقة StringComparisonField.notEquals(String boolean, bool ignoreCase)
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
// IgnoreCase is True
MailQueryBuilder builder1 = new MailQueryBuilder();
builder1.getFrom().contains("tesT", true);
MailQuery query1 = builder1.getQuery();
Pop3MessageInfoCollection messageInfoCol1 = client.listMessages(query1);