Eklerle ve Gömülü Nesnelerle Çalışma

E-posta Eklerini Yönetme

E-posta eki, e-posta mesajıyla birlikte gönderilen bir dosyadır. Dosya, ekli olduğu mesajın bir parçası ve ayrıca ayrı bir mesaj olarak da gönderilebilir. Attachment sınıf şu ile birlikte kullanılır: MailMessage sınıf. Tüm mesajlar bir gövde içerir. Gövdeye ek olarak ek dosyalar göndermek isteyebilirsiniz. Bunlar ek olarak gönderilir ve şu sınıfın bir örneği olarak temsil edilir: Attachment sınıf. İstediğiniz kadar ek gönderebilirsiniz ancak ek boyutu mail sunucusu tarafından sınırlanır. Örneğin Gmail, 10 MB’den büyük dosyaları desteklemez.

Ek Ekleme

Bir ek’i e-postaya eklemek için lütfen aşağıdaki adımları izleyin:

  1. Şunun bir örneğini oluştur MailMessage sınıf.
  2. Şunun bir örneğini oluştur Attachment sınıf.
  3. Ek’i şuna yükle Attachment örnek.
  4. Şunu ekleyin Attachment örneğini şuna MailMessage örnek.

Aşağıdaki kod parçacığı, bir e-postaya ek eklemenin nasıl yapılacağını gösterir.

// Create an instance of MailMessage class
MailMessage message = new MailMessage();
message.setFrom(new MailAddress("sender@from.com"));
message.getTo().add("receiver@to.com");
message.setSubject("This is message");
message.setBody("This is body");

// Load an attachment
Attachment attachment = new Attachment("1.txt");

// Add Multiple Attachment in instance of MailMessage class and Save message to disk
message.getAttachments().addItem(attachment);
message.addAttachment(new Attachment("1.jpg"));
message.addAttachment(new Attachment("1.doc"));
message.addAttachment(new Attachment("1.rar"));
message.addAttachment(new Attachment("1.pdf"));
message.save("AddAttachments.eml");

Yukarıda, Aspose.Email ile e-posta mesajınıza eklerin nasıl ekleneceğini açıkladık. Aşağıda eklerin nasıl kaldırılacağını ve bilgilerinin ekranda nasıl gösterileceğini göreceksiniz.

Ek Kaldırma

Bir eki kaldırmak için aşağıdaki adımları izleyin:

  • Bir örnek oluştur Attachment sınıf.
  • Şu sınıfın örneğinde eki yükleyin Attachment sınıf.
  • Şu sınıfın örneğine eki ekleyin MailMessage sınıf.
  • Şu sınıfın örneğinden ekleri kaldırın Attachment sınıfı … kullanarak MailMessage class instance.

Aşağıdaki kod parçacığı, bir ekin nasıl kaldırılacağını gösterir.

// Create an instance of MailMessage class
MailMessage eml = new MailMessage();
eml.setFrom(new MailAddress("sender@from.com"));
eml.getTo().add("receiver@to.com");

// Load an attachment
Attachment attachment = new Attachment("1.txt");
eml.getAttachments().addItem(attachment);

// Remove attachment from your MailMessage
eml.getAttachments().removeItem(attachment);

Ek Dosya Adını Görüntüleme

Ek dosya adını göstermek için aşağıdaki adımları izleyin:

  1. E-posta mesajındaki ekler üzerinde döngü yap ve
    1. Her eki kaydet.
    2. Her ek adını ekranda göster.

Aşağıdaki kod parçacığı, bir ek dosyasının adını ekranda nasıl göstereceğinizi gösterir.

MailMessage eml = MailMessage.load("Attachments.eml");

for (Attachment attachment : eml.getAttachments()) {
    // Display the attachment file name
    System.out.println(attachment.getName());
}

E-posta Eklerini Çıkarma

Bu konu, bir e-posta dosyasından ekin nasıl çıkarılacağını açıklar. E-posta eki, e-posta mesajıyla birlikte gönderilen bir dosyadır. Dosya, ayrı bir mesaj olarak veya eklendiği mesajın bir parçası olarak gönderilebilir. Tüm e-posta mesajları ek dosyalar gönderme seçeneği içerir. Bunlar ek olarak gönderilir ve … sınıflarının örnekleri olarak temsil edilir. Attachment sınıf. Attachment sınıf şu ile birlikte kullanılır: MailMessage sınıfı, eklerle çalışmak içindir. Bir e-posta mesajından ekleri çıkarmak için aşağıdaki adımları izleyin:

  • Şunun bir örneğini oluştur MailMessage sınıf.
  • Bir e-posta dosyasını şunun içine yükleyin MailMessage örnek.
  • Şunun bir örneğini oluştur Attachment sınıfı ve bir döngü içinde tüm ekleri çıkarmak için kullanın.
  • Ek’i kaydedin ve ekranda gösterin.

|Extracted attachments in email| | :- | |todo:image_alt_text| Aşağıdaki kod parçacığı, E-posta Eklerini Nasıl Çıkaracağınızı gösterir.

MailMessage eml = MailMessage.load("Message.eml", new MsgLoadOptions());

for (Attachment attachment : eml.getAttachments()) {
    attachment.save("MessageEmbedded_out.eml");
    System.out.println(attachment.getName());
}

Ekin İçerik Açıklamasını Alma

Aspose.Email API, ek başlığından ek Content-Description (İçerik Açıklaması) okuma yeteneği sağlar. Aşağıdaki kod parçacığı, ekten içerik açıklamasını nasıl alacağınızı gösterir.

MailMessage eml = MailMessage.load("EmailWithAttachEmbedded.eml");
System.out.println(eml.getAttachments().get_Item(0).getHeaders().get_Item("Content-Description"));

Ek’in Gömülü Bir Mesaj Olup Olmadığını Belirleme

Aşağıdaki kod parçacığı, ekin gömülü bir mesaj olup olmadığını nasıl belirleyeceğinizi gösterir.

MailMessage eml = MailMessage.load("EmailWithAttachEmbedded.eml");

System.out.println(eml.getAttachments().get_Item(0).isEmbeddedMessage()
        ? "Attachment is an embedded message."
        : "Attachment isn't an embedded message.");

TNEF Formatlı Ekleri Belirleme

Bu Attachment.isTnef Aspose.Email Java API’sinin özelliği, mesaj ekinin TNEF formatında bir mesaj olup olmadığını gösterir.

Aşağıdaki kod parçacığı, bir ekin TNEF formatında olup olmadığını nasıl belirleyeceğinizi gösterir:

MailMessage eml = MailMessage.load(fileName);

for (Attachment attachment : eml.getAttachments()) {
    System.out.println("Is Attachment TNEF?: " + attachment.isTnef());
}

TNEF Eklerini Yükleme ve Kaydetme

Aspose.Email for Java, … içinde yöntemler sunar MapiAttachment sınıfı aşağıdaki işlemleri gerçekleştirmek için:

TNEF’den Yükle

  • static MapiAttachment loadFromTnef(String fileName) – Bir ek dosyasını TNEF dosyasından yükler.

  • static MapiAttachment loadFromTnef(InputStream stream) – Bir ek dosyasını TNEF akışından yükler.

TNEF’ye Kaydet

  • void saveToTnef(String fileName) – Bir ek dosyasını TNEF dosyasına kaydeder.

  • void saveToTnef(OutputStream stream) – Bir ek dosyasını TNEF akışına kaydeder.

Aşağıdaki kod örneği, bir mesajdan TNEF ekini nasıl çıkaracağınızı, bir akışa ya da dosyaya kaydedeceğinizi ve ardından mesaj içine bir … olarak yeniden yükleyeceğinizi gösterir MapiAttachment:

// Load message containing a TNEF attachment (winmail.dat)
MapiMessage msg = MapiMessage.load("message.eml");

// Save the first attachment to a TNEF stream
ByteArrayOutputStream bos = new ByteArrayOutputStream();
msg.getAttachments().get(0).saveToTnef(bos);

// Load attachment back from the TNEF stream
ByteArrayInputStream bis = new ByteArrayInputStream(bos.toByteArray());
MapiAttachment fromtnefAttachment = MapiAttachment.loadFromTnef(bis);
msg.getAttachments().addMapiAttachment(fromtnefAttachment);

// Load TNEF attachment directly from a file
fromtnefAttachment = MapiAttachment.loadFromTnef("winmail.dat");
msg.getAttachments().addMapiAttachment(fromtnefAttachment);

Eklenti bir URI-ek ise URI’sını Çıkarma

Aşağıdaki kod parçacığı, Eklenti URI’sını nasıl çıkaracağınızı gösterir.

MailMessage eml = MailMessage.load("fileName");

Attachment attachment = eml.getAttachments().get_Item(0);
if (attachment.isUri()) {
    InputStream inputStream = attachment.getContentStream();
    String uri = new String(IOUtils.toByteArray(inputStream), Charset.forName("utf-8"));
    System.out.println("Attachment URI: " + uri);
}

Referans Ekleri Ekleme

Referans eki, yerel dosya ekine bir alternatiftir. Bazı durumlarda, örneğin erişimini yönetmek istiyorsanız, referans ekleri daha uygun olabilir. Aşağıdaki sınıflar, e-posta mesajlarını ve eklerini yönetmek ve manipüle etmek için kullanılır:

Aşağıdaki kod örneği, bir dosyadan e-posta mesajını nasıl yükleyeceğinizi, belirli özelliklere sahip bir referans eki oluşturacağınızı ve eki e-posta mesajına ekleyeceğinizi gösterir:

MailMessage eml = MailMessage.load("fileName");

ReferenceAttachment refAttach = new ReferenceAttachment("https://[attach_uri]")
refAttach.setName("Document.docx");
refAttach.setProviderType(AttachmentProviderType.OneDrivePro);
refAttach.setPermissionType(AttachmentPermissionType.AnyoneCanEdit);

eml.getAttachments().addItem(refAttach);

Gömülü Nesnelerle Çalışma

Gömülü bir nesne, bir uygulama ile oluşturulup başka bir uygulama tarafından oluşturulan bir belge veya dosya içinde yer almış nesnedir. Örneğin bir Microsoft Excel çalışma sayfası bir Microsoft Word raporuna gömülebilir veya bir video dosyası bir Microsoft PowerPoint sunumuna gömülebilir. Bir dosya gömüldüğünde, başka bir belgeye eklenmek ya da yapıştırılmak yerine orijinal biçimini korur. Gömülü belge, orijinal uygulamada açılabilir ve değiştirilebilir.

E-postaya Nesneleri Gömme

Bu LinkedResource sınıf şu ile birlikte kullanılır: MailMessage sınıfı, e-posta mesajlarınıza nesneleri gömmek için kullanılır. Bir gömülü nesne eklemek için aşağıdaki adımları izleyin

  1. Şunun bir örneğini oluştur MailMessage sınıf.
  2. Gönderen, alıcı ve konu değerlerini şunun içinde belirtin MailMessage örnek.
  3. Şunun bir örneğini oluştur AlternateView sınıf.
  4. Şunun bir örneğini oluştur LinkedResource sınıf.
  5. Bir gömülü nesneyi şuna yükleyin LinkedResourceCollection.
  6. Yüklenen gömülü nesneyi şuna ekleyin MailMessage class instance.
  7. Şunu ekleyin AlternateView örneğini şuna MailMessage class instance.

Aşağıdaki kod parçacıkları, düz metin ve HTML gövdeleri ile HTML içine gömülmüş bir resim içeren bir e-posta mesajı üretir

|Image embedded into email| | :- | |todo:image_alt_text| Herhangi bir sayıda gömülü nesne gönderebilirsiniz. Ekin boyutu posta sunucusu tarafından sınırlanır. Örneğin Gmail, 10 MB’den büyük dosya boyutlarını desteklemez. Aşağıdaki kod parçacıkları, bir e-postaya nesnelerin nasıl gömüleceğini gösterir.

// Create an instance of the MailMessage class and Set the addresses and Set the content
MailMessage mail = new MailMessage();
mail.setFrom(new MailAddress("sender@from.com"));
mail.getTo().add("receiver@to.com");
mail.setSubject("This is an email");

// Create the plain text part It is viewable by those clients that don't support HTML
AlternateView plainView = AlternateView.createAlternateViewFromString("This is my plain text content", null, "text/plain");

// Create the HTML part.To embed images, we need to use the prefix 'cid' in the img src value. 
// The cid value will map to the Content-Id of a Linked resource. 
// Thus <img src='cid:barcode'> will map to a LinkedResource with a ContentId of //'barcode'.
AlternateView htmlView = AlternateView.createAlternateViewFromString("Here is an embedded image.<img src=cid:barcode>", null, "text/html");

// Create the LinkedResource (embedded image) and Add the LinkedResource to the appropriate view
LinkedResource barcode = new LinkedResource("1.jpg", MediaTypeNames.Image.JPEG);
barcode.setContentId("barcode");

mail.getLinkedResources().addItem(barcode);
mail.getAlternateViews().addItem(plainView);
mail.getAlternateViews().addItem(htmlView);
mail.save("EmbeddedImage_out.msg", SaveOptions.getDefaultMsgUnicode());

E-postadan Gömülü Nesneleri Kaldırma

LinkedResourceCollection şunun aracılığıyla erişilir MailMessage.LinkedResources özelliği. Şu LinkedResourceCollection koleksiyon, bir e-posta mesajına eklenen gömülü nesneleri tamamen kaldırmak için bir yöntem sağlar. Şunun aşırı yüklenmiş sürümünü kullanın LinkedResourceCollection.removeAt bir e-posta mesajından gömülü bir nesnenin tüm izlerini kaldırmak için yöntem.

Aşağıdaki örnek kod, bir e-posta mesajından gömülü nesnelerin nasıl kaldırılacağını gösterir.

// Load the test message with Linked Resources
MailMessage msg = MailMessage.load("EmlWithLinkedResources.eml");

// Remove a LinkedResource
msg.getLinkedResources().removeAt(0, true);

// Now clear the Alternate View for linked Resources
msg.getAlternateViews().get_Item(0).getLinkedResources().clear(true);

Gömülü Nesneleri Çıkarma

Bu konu, bir e-posta dosyasından gömülü nesnelerin nasıl çıkarılacağını açıklar. Gömülü bir nesne, bir uygulama ile oluşturulup başka bir uygulama tarafından oluşturulan bir belge veya dosya içinde yer almış nesnedir. Örneğin, bir Microsoft Excel çalışma sayfası bir Microsoft Word raporuna gömülebilir veya bir video dosyası bir Microsoft PowerPoint sunumuna gömülebilir. Bir dosya gömüldüğünde, başka bir belgeye eklenmek ya da yapıştırılmak yerine orijinal biçimini korur. Gömülü belge, orijinal uygulamada açılabilir ve değiştirilebilir. Bir e-posta mesajından gömülü bir nesneyi çıkarmak için aşağıdaki adımları izleyin:

  1. Şunun bir örneğini oluştur MailMessage sınıf.
  2. Bir e-posta dosyasını şunun içinde yükleyin MailMessage örnek.
  3. Bir döngü oluşturun ve şunun bir örneğini oluşturun Attachment içindeki sınıf.
  4. Ek’i kaydedin ve ekranda gösterin.
  5. Gönderici ve alıcı adresini şunun içinde belirtin MailMessage örnek.
  6. E-postayı şununla gönder SmtpClient sınıf.

Aşağıdaki kod parçacığı bir e-postadan gömülü nesneleri çıkarır.

|E-postadaki çıkarılan gömülü nesneler| | :- | |todo:image_alt_text| Aşağıdaki kod parçacığı gömülü nesneleri nasıl çıkaracağınızı gösterir.

MailMessage mailMsg = MailMessage.load("Message.msg", new MsgLoadOptions());

for (Attachment attachment : mailMsg.getAttachments()) {
    attachment.save("MessageEmbedded_out.msg");
    System.out.println(attachment.getName());
}

RTF olarak biçimlendirilmiş MSG’den gömülü bir eki tanımlama ve çıkartma

Aşağıdaki kod, RTF biçiminde mesajlar için satır içinde (Inline) ya da mesaj gövdesinde simge (Icon) olarak görünen ekleri ayırmak ve çıkarmak için kullanılabilir. Aşağıdaki kod parçacığı, RTF olarak biçimlendirilmiş MSG’den gömülü bir eki nasıl tanımlayıp çıkaracağınızı gösterir.

public static void extractInlineAttachments() {
    MapiMessage message = MapiMessage.load("MSG file with RTF Formatting.msg");
    for (MapiAttachment attachment : message.getAttachments()) {

        if (isAttachmentInline(attachment)) {
            try {
                saveAttachment(attachment, UUID.randomUUID().toString());
            } catch (Exception ex) {
                System.err.println(ex);
            }
        }
    }
}

static boolean isAttachmentInline(MapiAttachment attachment) {
    for (MapiProperty property : attachment.getObjectData().getProperties().get_Values()) {
        if ("\u0003ObjInfo".equals(property.getName())) {
            byte[] data = property.getData();
            int odtPersist1 = data[1] << 8 | data[0];
            return (odtPersist1 & 0x40) == 0;
        }
    }
    return false;
}

static void saveAttachment(MapiAttachment attachment, String fileName) throws IOException {
    for (MapiProperty property : attachment.getObjectData().getProperties().get_Values()) {
        if ("Package".equals(property.getName())) {
            try (FileOutputStream fs = new FileOutputStream(fileName)) {
                fs.write(property.getData(), 0, property.getData().length);
            }
        }
    }
}

İmzalı E-postadan Ekleri Getirme

İmzalı e-postalar tek bir smime.p7m eki içerir. Bu, e-postanın SMIME ile şifrelendiği anlamına gelir. Smime.p7m dosya formatı dijital imzadır. Bu e-postanın içeriğini görmek için şunu kullanın: RemoveSignature metod. Metod bir değer döndürür MailMessage nesne dijital imza olmadan.

MailMessage signedEml = MailMessage.load("signed.eml");

if (signedEml.isSigned()) {
    for (int i = 0; i < signedEml.getAttachments().size(); i++) {
        System.out.println("Signed email attachment" + i + ": " + signedEml.getAttachments().get_Item(i).getName());
    }

    // The email is signed. Remove a signature.
    MailMessage eml = signedEml.removeSignature();

    System.out.println("Signature removed.");

    for (int i = 0; i < eml.getAttachments().size(); i++) {
        System.out.println("Email attachment" + i + ": " + eml.getAttachments().get_Item(i).getName());
    }
}

Content-Type ve Content-Disposition ile Çalışma

Aspose.Email API, ekyle çalışabilme yeteneği sağlar Content-Type ve Content-Disposition ek üstbilgisinden. Aşağıdaki kod parçacığı, ekten içerik açıklamasını alıp değiştirmenizi gösterir.

Content-Type ve Content-Disposition Parametrelerini Görüntüleme

Aşağıdaki kod parçacığı, Content-Type ve Content-Disposition parametrelerini ekranda nasıl göstereceğinizi gösterir:

void run(MailMessage message) {
    // Attachments
    for (Attachment attachment : message.getAttachments()) {
        ContentDisposition contentDisposition = attachment.getContentDisposition();
        printContentDisposition(contentDisposition);
        ContentType contentType = attachment.getContentType();
        printContentType(contentType);
    }
    // Linked Resources
    for (LinkedResource attachment : message.getLinkedResources()) {
        ContentDisposition contentDisposition = attachment.getContentDisposition();
        printContentDisposition(contentDisposition);
        ContentType contentType = attachment.getContentType();
        printContentType(contentType);
    }
}

void printContentType(ContentType contentType) {
    System.out.println("media-type: " + contentType.getMediaType());
    System.out.println("charset: " + contentType.getCharSet());
    System.out.println("name: " + contentType.getName());
}

void printContentDisposition(ContentDisposition contentDisposition) {
    System.out.println("disposition-type: " + contentDisposition.getDispositionType());
    System.out.println("is-inline: " + contentDisposition.getInline());
    System.out.println("filename: " + contentDisposition.getFileName());
    System.out.println("creation-date: " + contentDisposition.getCreationDate());
    System.out.println("modification-date: " + contentDisposition.getModificationDate());
    System.out.println("read-date: " + contentDisposition.getReadDate());
    System.out.println("size: " + contentDisposition.getSize());
}

Eklerle Content-Type ve Content-Disposition Parametrelerini Kullanma

Aşağıdaki kod parçacığı, bir ek ile Content-Type ve Content-Disposition parametrelerini nasıl kullanacağınızı gösterir:

MailMessage eml = MailMessage.load(fileName);

Attachment attachment = new Attachment(pdfFileName, new ContentType("application/octet-stream"));
attachment.getContentDisposition().setDispositionType("attachment");
attachment.getContentDisposition().setFileName(fileName);

eml.addAttachment(attachment);