첨부 파일 및 내장 객체 작업

이메일 첨부 파일 관리

이메일 첨부 파일은 이메일 메시지와 함께 전송되는 파일입니다. 파일은 별도의 메시지로도 전송될 수 있고, 첨부된 메시지의 일부로도 전송될 수 있습니다. 그 Attachment 클래스는 MailMessage 클래스. 모든 메시지는 본문을 포함합니다. 본문 외에 추가 파일을 전송하려면 첨부 파일로 전송되며, 이는 다음 클래스의 인스턴스로 표현됩니다 Attachment 클래스. 첨부 파일 수에는 제한이 없지만 첨부 파일 크기는 메일 서버에 의해 제한됩니다. 예를 들어 Gmail은 10MB 초과 파일을 지원하지 않습니다.

첨부 파일 추가

이메일에 첨부 파일을 추가하려면 다음 단계를 따르세요:

  1. 다음의 인스턴스를 생성합니다. MailMessage 클래스.
  2. 다음의 인스턴스를 생성합니다. Attachment 클래스.
  3. 첨부 파일을 로드합니다 Attachment 인스턴스.
  4. 다음 추가 Attachment 인스턴스를 MailMessage 인스턴스.

다음 코드 스니펫은 이메일에 첨부 파일을 추가하는 방법을 보여줍니다.

// 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");

앞서 Aspose.Email를 사용하여 이메일 메시지에 첨부 파일을 추가하는 방법을 설명했습니다. 다음은 첨부 파일을 제거하고 화면에 정보를 표시하는 방법을 보여줍니다.

첨부 파일 제거

첨부 파일을 제거하려면 아래 단계를 따르세요:

  • 다음의 인스턴스를 생성합니다 Attachment 클래스.
  • 인스턴스에 첨부 파일을 로드합니다 Attachment 클래스.
  • 인스턴스에 첨부 파일을 추가합니다 MailMessage 클래스.
  • 인스턴스에서 첨부 파일을 제거합니다 Attachment 클래스 사용 MailMessage 클래스 인스턴스.

다음 코드 스니펫은 첨부 파일을 제거하는 방법을 보여줍니다.

// 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);

첨부 파일 이름 표시

첨부 파일 이름을 표시하려면 다음 단계를 따르세요:

  1. 이메일 메시지의 첨부 파일을 순회하고
    1. 각 첨부 파일을 저장합니다.
    2. 각 첨부 파일 이름을 화면에 표시합니다.

다음 코드 스니펫은 화면에 첨부 파일 이름을 표시하는 방법을 보여줍니다.

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

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

이메일 첨부 파일 추출

이 항목에서는 이메일 파일에서 첨부 파일을 추출하는 방법을 설명합니다. 이메일 첨부 파일은 이메일 메시지와 함께 전송되는 파일입니다. 파일은 별도의 메시지로 전송될 수도 있고, 첨부된 메시지의 일부로 전송될 수도 있습니다. 모든 이메일 메시지는 추가 파일을 전송할 수 있는 옵션을 제공하며, 이러한 파일은 첨부 파일로 전송되고 다음 클래스의 인스턴스로 표시됩니다. Attachment 클래스. Attachment 클래스는 MailMessage 클래스는 첨부 파일을 다룹니다. 이메일 메시지에서 첨부 파일을 추출하려면 다음 단계를 따르세요:

  • 다음의 인스턴스를 생성합니다. MailMessage 클래스.
  • 이메일 파일을 로드합니다 MailMessage 인스턴스.
  • 다음의 인스턴스를 생성합니다. Attachment 클래스를 사용하여 루프에서 모든 첨부 파일을 추출합니다.
  • 첨부 파일을 저장하고 화면에 표시합니다.

|이메일에서 추출된 첨부 파일| | :- | |todo:image_alt_text| 다음 코드 스니펫은 이메일 첨부 파일을 추출하는 방법을 보여줍니다.

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

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

첨부 파일에서 Content-Description 가져오기

Aspose.Email API는 첨부 파일 헤더에서 Content-Description을 읽을 수 있는 기능을 제공합니다. 다음 코드 스니펫은 첨부 파일에서 내용 설명을 가져오는 방법을 보여줍니다.

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

첨부 파일이 포함된 메시지인지 판단

다음 코드 스니펫은 첨부 파일이 포함된 메시지인지 여부를 판단하는 방법을 보여줍니다.

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 형식 첨부 파일 판단

다음은 Attachment.isTnef Aspose.Email Java API의 해당 속성은 첨부 파일이 TNEF 형식인지 여부를 나타냅니다.

다음 코드 스니펫은 첨부 파일이 TNEF 형식인지 확인하는 방법을 보여줍니다.

MailMessage eml = MailMessage.load(fileName);

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

TNEF 첨부 파일 로드 및 저장

Aspose.Email for Java는 다음 메서드를 제공합니다 MapiAttachment 다음 작업을 수행하는 클래스:

TNEF 로드

  • static MapiAttachment loadFromTnef(String fileName) – TNEF 파일에서 첨부 파일을 로드합니다.

  • static MapiAttachment loadFromTnef(InputStream stream) – TNEF 스트림에서 첨부 파일을 로드합니다.

TNEF 저장

  • void saveToTnef(String fileName) – 첨부 파일을 TNEF 파일에 저장합니다.

  • void saveToTnef(OutputStream stream) – 첨부 파일을 TNEF 스트림에 저장합니다.

다음 코드 샘플은 메시지에서 TNEF 첨부 파일을 추출하고, 스트림 또는 파일에 저장한 뒤, 다시 메시지에 로드하는 방법을 보여줍니다. 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);

첨부 파일이 URI-첨부인 경우 URI 추출

다음 코드 스니펫은 첨부 파일 URI를 추출하는 방법을 보여줍니다.

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);
}

참조 첨부 추가

참조 첨부 파일은 로컬 파일 첨부의 대안입니다. 경우에 따라 접근을 관리하고 싶을 때와 같이 참조 첨부 파일이 더 적합할 수 있습니다. 아래 클래스들은 이메일 메시지와 그 첨부 파일을 관리하고 조작하는 데 사용됩니다.

다음 코드 샘플은 파일에서 이메일 메시지를 로드하고, 특정 속성을 가진 참조 첨부 파일을 생성한 다음, 해당 첨부 파일을 이메일 메시지에 추가하는 방법을 보여줍니다.

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);

포함된 개체 작업

포함된 개체는 하나의 애플리케이션으로 생성되어 다른 애플리케이션에서 만든 문서나 파일에 포함된 개체입니다. 예를 들어 Microsoft Excel 스프레드시트를 Microsoft Word 보고서에 포함하거나 비디오 파일을 Microsoft PowerPoint 프레젠테이션에 포함할 수 있습니다. 파일이 삽입되는 대신 포함되면 원래 형식을 유지합니다. 포함된 문서는 원본 애플리케이션에서 열어 수정할 수 있습니다.

이메일에 개체 포함

다음은 LinkedResource 클래스는 MailMessage 클래스는 이메일 메시지에 개체를 포함합니다. 포함된 개체를 추가하려면 다음 단계를 따르세요.

  1. 다음의 인스턴스를 생성합니다. MailMessage 클래스.
  2. 보낸 사람, 받는 사람 및 제목 값을 지정합니다 MailMessage 인스턴스.
  3. 다음의 인스턴스를 생성합니다. AlternateView 클래스.
  4. 다음의 인스턴스를 생성합니다. LinkedResource 클래스.
  5. 포함된 개체를 다음에 로드합니다 LinkedResourceCollection.
  6. 로드된 포함된 개체를 다음에 추가합니다 MailMessage 클래스 인스턴스.
  7. 다음 추가 AlternateView 인스턴스를 MailMessage 클래스 인스턴스.

아래 코드 스니펫은 일반 텍스트와 HTML 본문을 모두 포함하고 HTML에 이미지가 포함된 이메일 메시지를 생성합니다.

|이메일에 포함된 이미지| | :- | |todo:image_alt_text| 포함된 개체를 원하는 만큼 보낼 수 있습니다. 첨부 파일 크기는 메일 서버에 의해 제한됩니다. 예를 들어 Gmail은 10MB를 초과하는 파일을 지원하지 않습니다. 아래 코드 스니펫은 이메일에 개체를 포함하는 방법을 보여줍니다.

// 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());

이메일에서 포함된 개체 제거

LinkedResourceCollection 다음으로 접근 MailMessage.LinkedResources 속성. LinkedResourceCollection 컬렉션은 이메일 메시지에 추가된 포함된 개체를 완전히 제거하는 메서드를 제공합니다. 다음의 오버로드된 버전을 사용하십시오 LinkedResourceCollection.removeAt 이메일 메시지에서 포함된 개체의 모든 흔적을 제거하는 메서드.

아래 샘플 코드는 이메일 메시지에서 포함된 개체를 제거하는 방법을 보여줍니다.

// 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);

포함된 개체 추출

이 항목에서는 이메일 파일에서 포함된 개체를 추출하는 방법을 설명합니다. 포함된 개체는 하나의 애플리케이션으로 생성되고 다른 애플리케이션에서 만든 문서나 파일에 포함된 개체를 말합니다. 예를 들어 Microsoft Excel 스프레드시트를 Microsoft Word 보고서에 포함하거나 비디오 파일을 Microsoft PowerPoint 프레젠테이션에 포함시킬 수 있습니다. 파일이 삽입되거나 복사되지 않고 포함되면 원래 형식을 유지합니다. 포함된 문서는 원본 애플리케이션에서 열어 수정할 수 있습니다. 이메일 메시지에서 포함된 개체를 추출하려면 다음 단계를 따르세요:

  1. 다음의 인스턴스를 생성합니다. MailMessage 클래스.
  2. 이메일 파일을 로드합니다 MailMessage 인스턴스.
  3. 루프를 만들고 해당 클래스의 인스턴스를 생성합니다. Attachment 그 안의 클래스.
  4. 첨부 파일을 저장하고 화면에 표시합니다.
  5. 보낸 사람과 받는 사람 주소를 지정합니다 MailMessage 인스턴스.
  6. 다음 방법을 사용하여 이메일을 보냅니다 SmtpClient 클래스.

아래 코드 스니펫은 이메일에서 내장 객체를 추출합니다.

|이메일에서 추출된 내장 객체| | :- | |todo:image_alt_text| 다음 코드 스니펫은 내장 객체를 추출하는 방법을 보여줍니다.

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

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

RTF 형식 MSG에서 내장된 첨부 파일 식별 및 추출

다음 코드는 RTF 형식 메시지에서 인라인 또는 아이콘 형태로 나타나는 첨부 파일을 구분하고 추출하는 데 사용할 수 있습니다. 아래 코드 스니펫은 RTF 형식 MSG에서 내장된 첨부 파일을 식별하고 추출하는 방법을 보여줍니다.

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);
            }
        }
    }
}

서명된 이메일에서 첨부 파일 가져오기

서명된 이메일에는 단일 smime.p7m 첨부 파일이 포함됩니다. 이는 이메일이 SMIME으로 암호화되었음을 의미합니다. Smime.p7m 파일 형식은 디지털 서명입니다. 이 이메일의 내용을 보려면 RemoveSignature 메서드. 이 메서드는 MailMessage 디지털 서명 없는 객체.

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 및 Content-Disposition 작업

Aspose.Email API는 첨부 파일과 작업할 수 있는 기능을 제공합니다 Content-TypeContent-Disposition 첨부 파일 헤더에서. 다음 코드 스니펫은 첨부 파일의 내용 설명을 가져오고 변경하는 방법을 보여줍니다.

Content-Type 및 Content-Disposition 매개변수 표시

다음 코드 스니펫은 화면에 Content-Type 및 Content-Disposition 매개변수를 표시하는 방법을 보여줍니다:

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());
}

첨부 파일에 Content-Type 및 Content-Disposition 매개변수 사용

다음 코드 스니펫은 첨부 파일과 함께 Content-Type 및 Content-Disposition 매개변수를 사용하는 방법을 보여줍니다:

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);