Attachment¶
The Attachment type represents a file attachment on a message.
Properties¶
Filename¶
Returns the attachment filename. Prefers the long filename, falls back to short filename.
Extension¶
Returns the file extension.
Size¶
Returns the attachment size in bytes.
Method¶
Returns the attachment method.
| Value | Constant | Description |
|---|---|---|
| 0 | AttachMethodNone | No attachment |
| 1 | AttachMethodByValue | Binary data stored in PST |
| 2 | AttachMethodByRef | Reference to external file |
| 4 | AttachMethodByRefRes | Reference (resolved) |
| 5 | AttachMethodEmbedded | Embedded message |
| 6 | AttachMethodOLE | OLE object |
MimeType¶
Returns the MIME type.
ContentID¶
Returns the Content-ID (for inline attachments in HTML).
Data Access¶
Data¶
Returns the attachment data as bytes.
data, err := att.Data()
if err != nil {
log.Printf("Failed to read attachment: %v", err)
return
}
// Save to file
filename, _ := att.Filename()
err = os.WriteFile(filename, data, 0644)
Embedded Messages¶
IsEmbeddedMessage¶
Returns true if the attachment is an embedded message (email within email).
OpenAsMessage¶
Opens an embedded message attachment as a Message.
isEmbedded, _ := att.IsEmbeddedMessage()
if isEmbedded {
embeddedMsg, err := att.OpenAsMessage()
if err != nil {
log.Printf("Failed to open: %v", err)
return
}
subject, _ := embeddedMsg.Subject()
fmt.Printf("Embedded: %s\n", subject)
}
Advanced Access¶
PropertyBag¶
Returns the attachment's property bag for advanced property access.
Example¶
func extractAttachment(att *outlookpst.Attachment, outputDir string) error {
// Check if embedded message
isEmbedded, _ := att.IsEmbeddedMessage()
if isEmbedded {
embeddedMsg, err := att.OpenAsMessage()
if err != nil {
return err
}
// Handle embedded message differently
subject, _ := embeddedMsg.Subject()
fmt.Printf("Embedded message: %s\n", subject)
return nil
}
// Get filename
filename, _ := att.Filename()
if filename == "" {
filename = "unnamed"
}
// Get data
data, err := att.Data()
if err != nil {
return fmt.Errorf("failed to read data: %w", err)
}
// Save file
outputPath := filepath.Join(outputDir, filename)
err = os.WriteFile(outputPath, data, 0644)
if err != nil {
return fmt.Errorf("failed to write file: %w", err)
}
size, _ := att.Size()
mimeType, _ := att.MimeType()
fmt.Printf("Saved: %s (%d bytes, %s)\n", filename, size, mimeType)
return nil
}