کار با پیام‌ها از سرور

دریافت اطلاعات صندوق‌پست

می‌توانیم اطلاعاتی درباره صندوق‌پست مانند تعداد پیام‌ها و اندازه صندوق‌پست را با استفاده از getMailBoxSize و getMailBoxInfo متدهای Pop3Client کلاس.

  • این getMailBoxSize متد اندازه صندوق‌پست را برحسب بایت برمی‌گرداند.
  • این getMailBoxInfo متد یک شیء از نوع را برمی‌گرداند Pop3MailBoxInfo.

همچنین می‌توان تعداد پیام‌ها را با استفاده از MessageCount ویژگی و اندازه با استفاده از OccupiedSize ویژگی Pop3MailBoxInfo کلاس. قطعه کد نمونه زیر نشان می‌دهد چگونه اطلاعات صندوق‌پست را دریافت کنیم. نشان می‌دهد چگونه:

  1. ایجاد یک Pop3Client.
  2. اتصال به سرور POP3.
  3. دریافت اندازه صندوق‌پست.
  4. دریافت اطلاعات صندوق‌پست.
  5. دریافت تعداد پیام‌ها در صندوق‌پست.
  6. دریافت اندازه اشغال شده.
// 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 اجزاء. The 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 می‌تواند اطلاعات خلاصهٔ پیام را از سرور با استفاده از شناسهٔ یکتا (unique id) پیام بازیابی کند. این امر دسترسی سریع به اطلاعات کوتاه پیام را بدون نیاز به دریافت کامل پیام از سرور فراهم می‌کند. قطعه کد زیر نشان می‌دهد چگونه اطلاعات خلاصهٔ پیام را بازیابی کنید.

// 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 برای استخراج اطلاعات فیلترشده از سرور. این مقاله نشان می‌دهد چگونه پیام‌های ایمیل را از یک صندوق‌پست فیلتر کنیم. مثال اول نشان می‌دهد چگونه پیام‌ها را بر اساس تاریخ و موضوع فیلتر کنیم. همچنین نشان می‌دهیم چگونه بر معیارهای دیگر فیلتر کنیم و نحوه ساخت پرس‌وجوهای پیچیده‌تر را. همچنین کاربرد فیلتر تاریخ و زمان برای بازیابی ایمیل‌های خاص از صندوق‌پست را نشان می‌دهد. علاوه بر این، نحوه اعمال فیلتر حساس به حروف نیز نشان داده می‌شود.

فیلتر کردن پیام‌ها از صندوق‌پست

برای فیلتر کردن پیام‌ها از یک صندوق‌پست:

  1. اتصال و ورود به سرور POP3.
  2. یک نمونه از MailQuery و ویژگی‌های موردنظر را تنظیم کنید.
  3. متد را فراخوانی کنید 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 همچنین قابلیت فیلتر کردن ایمیل‌ها از صندوق‌پست بر اساس معیار حساس به حروف کوچک و بزرگ را فراهم می‌کند. متدهای زیر امکان جستجوی ایمیل‌ها با پرچم حساس به حروف را ارائه می‌دهند.

  • Method StringComparisonField.contains(String value, boolean ignoreCase)
  • Method StringComparisonField.equals(String value, boolean ignoreCase)
  • Method StringComparisonField.notContains(String boolean, bool ignoreCase)
  • Method 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);