Installation:
composer require oroinc/laminas-mime
Replace laminas/laminas-mime with oroinc/laminas-mime in your composer.json if already installed.
First Use Case: Parse a MIME message (e.g., an email) to extract parts like headers, body, and attachments:
use OroInc\LaminasMime\Message;
$message = Message::fromString($rawEmailString);
$headers = $message->getHeaders();
$body = $message->getBody();
Key Classes to Explore:
OroInc\LaminasMime\Message: Core class for parsing MIME messages.OroInc\LaminasMime\Part: Represents individual parts of a MIME message (e.g., attachments).OroInc\LaminasMime\Mime: Utility class for MIME type handling.Documentation: Refer to the original Laminas MIME docs (APIs remain identical). Focus on:
Parsing Emails:
$message = Message::fromString($emailContent);
foreach ($message->getParts() as $part) {
if ($part->isAttachment()) {
$attachment = $part->getContent();
// Save or process attachment
}
}
Building MIME Messages:
$message = new Message();
$message->setEncoding('8bit');
$message->setBody('Hello, World!');
$message->getHeaders()->addHeaderLine('Subject', 'Test Email');
$messageString = $message->toString();
Handling Multipart Messages:
$multipart = new Multipart('mixed');
$multipart->addPart(new Part('This is part 1'));
$multipart->addPart(new Part('This is part 2'));
$message->setBody($multipart);
Integration with Laravel:
illuminate/mail for custom email parsing/manipulation.use OroInc\LaminasMime\Message;
use Illuminate\Support\Facades\Mail;
Mail::raw($rawEmail, function ($message) {
$laminasMessage = Message::fromString($rawEmail);
// Extract data from $laminasMessage and attach to $message
});
MIME Type Handling:
use OroInc\LaminasMime\Mime;
$mimeType = Mime::typeOf('example.pdf'); // 'application/pdf'
$extension = Mime::extensionOf('application/json'); // 'json'
Swift_Transport or Swift_Mailer to inject OroInc\LaminasMime for custom MIME processing.Mime::typeOf().return response($laminasMessage->toString())
->header('Content-Type', $laminasMessage->getMediaType());
PHP 8.4 Compatibility:
laminas/laminas-mime in the same project.Deprecated Features:
getRawHeaders()) may be deprecated. Use alternatives like getHeaders().Performance:
$part->getContentStream(); // If available
Encoding Issues:
setEncoding('8bit') or 'base64' for binary data). Defaults may break attachments.Multipart Boundaries:
Multipart::generateBoundary():
$multipart = new Multipart('mixed', Multipart::generateBoundary());
\Log::debug('Raw MIME input', ['content' => $rawEmail]);
$headers = $message->getHeaders();
$headers->toString(); // Log or inspect
$this->app->singleton(OroInc\LaminasMime\Message::class, function () {
$message = new Message();
$message->setEncoding('7bit'); // Default encoding
return $message;
});
Custom Parts:
Extend OroInc\LaminasMime\Part to add domain-specific logic:
class CustomPart extends Part {
public function isInvoice() {
return $this->getContentType() === 'application/invoice';
}
}
MIME Type Overrides:
Override Mime::getMimeTypes() to add custom MIME mappings:
Mime::getMimeTypes()->offsetSet('custom/type', ['custom']);
Event Listeners:
Attach listeners to Message or Part events (if supported in the fork). Example for original Laminas:
$message->getEventManager()->attach('part.add', function ($event) {
// Handle part addition
});
laminas/laminas-mime:
Replace namespace imports:
- use Laminas\Mime\Message;
+ use OroInc\LaminasMime\Message;
symfony/mime:
Key differences:
Message::fromString() vs Symfony’s Email::fromString().getParts() vs Symfony’s getAttachments()).symfony/mime for new projects.oroinc/laminas-mime in composer.json:
composer require --dev oroinc/laminas-mime
How can I help you explore Laravel packages today?