https://github.com/divineomega/email-structure-parser
📧 Parses the structure of multipart emails
https://github.com/divineomega/email-structure-parser
email email-parser email-parsing php php-library
Last synced: over 1 year ago
JSON representation
📧 Parses the structure of multipart emails
- Host: GitHub
- URL: https://github.com/divineomega/email-structure-parser
- Owner: DivineOmega
- License: lgpl-3.0
- Created: 2018-08-07T22:45:32.000Z (almost 8 years ago)
- Default Branch: master
- Last Pushed: 2021-02-12T12:35:13.000Z (over 5 years ago)
- Last Synced: 2025-02-28T06:04:39.297Z (over 1 year ago)
- Topics: email, email-parser, email-parsing, php, php-library
- Language: PHP
- Homepage:
- Size: 13.7 KB
- Stars: 2
- Watchers: 3
- Forks: 2
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Email Structure Parser
Given an IMAP stream and a message number, this library will parse the
structure of multipart emails.
## Installation
You can easily install the Email Structure Parser package using the following
Composer command.
```bash
composer require divineomega/email-structure-parser
```
## Usage
To use this parser, you must have first connect to a mail server using PHP's built-in
`imap_open` function. Once connected, you then need to retrieve a message number,
via the `imap_search` function.
Once you have a message number, you can pass it, along with the IMAP stream object,
into the `EmailStructureParser`. You can then call the `getParts()` method to
retrieve an array of parsed email parts split up by mime type.
See the example usage code below.
```php
use DivineOmega\EmailStructureParser\EmailStructureParser;
// Connect to mailbox
$imapStream = imap_open('{outlook.office365.com:993/ssl/novalidate-cert}INBOX', getenv('USERNAME'), getenv('PASSWORD'));
// Get a message number (in this example, just get the first)
$msgNums = imap_search($imapStream, 'ALL');
$msgNum = $msgNums[0];
// Load message into parser
$parser = new EmailStructureParser($imapStream, $msgNum);
// Get parsed multipart email parts - including plain text and/or HTML content, and any attachments
$parts = $parser->getParts();
// Output HTML email content
var_dump($parts['TEXT/HTML']);
// Save attached PNG images
foreach($parts['IMAGE/PNG'] as $image) {
file_put_contents($image->name, $image->content);
}
```
## Content IDs
Some emails embed images into the HTML content using `cid:` urls. These URLs link to the content ID of another part within the email, rather than being an absolute `https://` URL that can be resolved normally.
If one exists, this content ID will be exposed via the `contentId` property of the `Part`:
```php
foreach($parts['IMAGE/PNG'] as $image) {
// Store the file as in the above example:
file_put_contents($image->name, $image->content);
// You would then want to store this relationship in your database:
echo "{$image->contentId} => {$image->name}\n";
}
```