zbateson / mail-mime-parser

An email parser written in PHP
https://mail-mime-parser.org/
BSD 2-Clause "Simplified" License
441 stars 56 forks source link

Use without composer #190

Closed chrisrex closed 2 months ago

chrisrex commented 2 years ago

Hi, I want to use the parser without composer. I use your example code like this: But there is an error: Fatal error: Uncaught Error: Class 'Pimple\Container' not found How can I use it without composer? Best regards Christoph

require_once 'Container.php';
require_once 'Header/AbstractHeader.php';
require_once 'Header/AddressHeader.php';
require_once 'Header/Consumer/AbstractConsumer.php';
require_once 'Header/Consumer/AddressBaseConsumer.php';
require_once 'Header/Consumer/AddressConsumer.php';
require_once 'Header/Consumer/AddressEmailConsumer.php';
require_once 'Header/Consumer/AddressGroupConsumer.php';
require_once 'Header/Consumer/CommentConsumer.php';
require_once 'Header/Consumer/ConsumerService.php';
require_once 'Header/Consumer/DateConsumer.php';
require_once 'Header/Consumer/GenericConsumer.php';
require_once 'Header/Consumer/IdBaseConsumer.php';
require_once 'Header/Consumer/IdConsumer.php';
require_once 'Header/Consumer/ParameterConsumer.php';
require_once 'Header/Consumer/QuotedStringConsumer.php';
require_once 'Header/Consumer/Received/DomainConsumer.php';
require_once 'Header/Consumer/Received/GenericReceivedConsumer.php';
require_once 'Header/Consumer/Received/ReceivedDateConsumer.php';
require_once 'Header/Consumer/ReceivedConsumer.php';
require_once 'Header/Consumer/SubjectConsumer.php';
require_once 'Header/DateHeader.php';
require_once 'Header/GenericHeader.php';
require_once 'Header/HeaderConsts.php';
require_once 'Header/HeaderFactory.php';
require_once 'Header/IdHeader.php';
require_once 'Header/IHeader.php';
require_once 'Header/IHeaderPart.php';
require_once 'Header/MimeEncodedHeader.php';
require_once 'Header/ParameterHeader.php';
require_once 'Header/Part/AddressGroupPart.php';
require_once 'Header/Part/AddressPart.php';
require_once 'Header/Part/CommentPart.php';
require_once 'Header/Part/DatePart.php';
require_once 'Header/Part/HeaderPart.php';
require_once 'Header/Part/HeaderPartFactory.php';
require_once 'Header/Part/LiteralPart.php';
require_once 'Header/Part/MimeLiteralPart.php';
require_once 'Header/Part/MimeLiteralPartFactory.php';
require_once 'Header/Part/ParameterPart.php';
require_once 'Header/Part/ReceivedDomainPart.php';
require_once 'Header/Part/ReceivedPart.php';
require_once 'Header/Part/SplitParameterToken.php';
require_once 'Header/Part/Token.php';
require_once 'Header/ReceivedHeader.php';
require_once 'Header/SubjectHeader.php';
require_once 'IMessage.php';
require_once 'MailMimeParser.php';
require_once 'Message/Factory/IMessagePartFactory.php';
require_once 'Message/Factory/IMimePartFactory.php';
require_once 'Message/Factory/IUUEncodedPartFactory.php';
require_once 'Message/Factory/PartChildrenContainerFactory.php';
require_once 'Message/Factory/PartHeaderContainerFactory.php';
require_once 'Message/Factory/PartStreamContainerFactory.php';
require_once 'Message/Helper/AbstractHelper.php';
require_once 'Message/Helper/GenericHelper.php';
require_once 'Message/Helper/MultipartHelper.php';
require_once 'Message/Helper/PrivacyHelper.php';
require_once 'Message/IMessagePart.php';
require_once 'Message/IMimePart.php';
require_once 'Message/IMultiPart.php';
require_once 'Message/IUUEncodedPart.php';
require_once 'Message/MessagePart.php';
require_once 'Message/MimePart.php';
require_once 'Message/MultiPart.php';
require_once 'Message/NonMimePart.php';
require_once 'Message/PartChildrenContainer.php';
require_once 'Message/PartFilter.php';
require_once 'Message/PartHeaderContainer.php';
require_once 'Message/PartStreamContainer.php';
require_once 'Message/UUEncodedPart.php';
require_once 'Message.php';
require_once 'Parser/AbstractParser.php';
require_once 'Parser/HeaderParser.php';
require_once 'Parser/IParser.php';
require_once 'Parser/MessageParser.php';
require_once 'Parser/MimeParser.php';
require_once 'Parser/NonMimeParser.php';
require_once 'Parser/ParserManager.php';
require_once 'Parser/Part/ParserPartChildrenContainer.php';
require_once 'Parser/Part/ParserPartChildrenContainerFactory.php';
require_once 'Parser/Part/ParserPartStreamContainer.php';
require_once 'Parser/Part/ParserPartStreamContainerFactory.php';
require_once 'Parser/Part/UUEncodedPartHeaderContainer.php';
require_once 'Parser/Part/UUEncodedPartHeaderContainerFactory.php';
require_once 'Parser/PartBuilder.php';
require_once 'Parser/PartBuilderFactory.php';
require_once 'Parser/Proxy/ParserMessageProxy.php';
require_once 'Parser/Proxy/ParserMessageProxyFactory.php';
require_once 'Parser/Proxy/ParserMimePartProxy.php';
require_once 'Parser/Proxy/ParserMimePartProxyFactory.php';
require_once 'Parser/Proxy/ParserNonMimeMessageProxy.php';
require_once 'Parser/Proxy/ParserNonMimeMessageProxyFactory.php';
require_once 'Parser/Proxy/ParserPartProxy.php';
require_once 'Parser/Proxy/ParserPartProxyFactory.php';
require_once 'Parser/Proxy/ParserUUEncodedPartProxy.php';
require_once 'Parser/Proxy/ParserUUEncodedPartProxyFactory.php';
require_once 'Stream/HeaderStream.php';
require_once 'Stream/MessagePartStream.php';
require_once 'Stream/StreamFactory.php';

use ZBateson\MailMimeParser\MailMimeParser;
use ZBateson\MailMimeParser\Message;
use ZBateson\MailMimeParser\Header\HeaderConsts;

// use an instance of MailMimeParser as a class dependency
$mailParser = new MailMimeParser();

// parse() accepts a string, resource or Psr7 StreamInterface
// pass `true` as the second argument to attach the passed $handle and close
// it when the returned IMessage is destroyed.
$handle = fopen('email.eml', 'r');
$message = $mailParser->parse($handle, false);         // returns `IMessage`

// OR: use this procedurally (Message::from also accepts a string,
// resource or Psr7 StreamInterface
// true or false as second parameter doesn't matter if passing a string.
//$string = "Content-Type: text/plain\r\nSubject: Test\r\n\r\nMessage";
//$message = Message::from($string, false);

echo $message->getHeaderValue(HeaderConsts::FROM);     // user@example.com
echo $message
    ->getHeader(HeaderConsts::FROM)                    // AddressHeader
    ->getPersonName();                                 // Person Name
echo $message->getHeaderValue(HeaderConsts::SUBJECT);  // The email's subject
echo $message
    ->getHeader(HeaderConsts::TO)                      // also AddressHeader
    ->getAddresses()[0]                                // AddressPart
    ->getName();                                       // Person Name
echo $message
    ->getHeader(HeaderConsts::CC)                      // also AddressHeader
    ->getAddresses()[0]                                // AddressPart
    ->getEmail();                                      // user@example.com

echo $message->getTextContent();                       // or getHtmlContent()

echo $message->getHeader('X-Foo');                     // for custom or undocumented headers

$att = $message->getAttachmentPart(0);                 // first attachment
echo $att->getHeaderValue(HeaderConsts::CONTENT_TYPE); // e.g. "text/plain"
echo $att->getHeaderParameter(                         // value of "charset" part
    'content-type',
    'charset'
);
echo $att->getContent();                               // get the attached file's contents
$stream = $att->getContentStream();                    // the file is decoded automatically
$dest = \GuzzleHttp\Psr7\stream_for(
    fopen('my-file.ext')
);
\GuzzleHttp\Psr7\copy_to_stream(
    $stream, $dest
);
// OR: more simply if saving or copying to another stream
$att->saveContent('my-file.ext');               // writes to my-file.ext
$att->saveContent($stream);                     // copies to the stream

// close only when $message is no longer being used.
fclose($handle);
zbateson commented 2 years ago

@chrisrex it means you need the dependencies Mail-Mime-Parser depends on. If you don't use composer you'll have to manually download and install them (and any dependencies they in turn depend on, etc...)

zbateson commented 2 years ago

This Stackoverflow question might help: https://stackoverflow.com/questions/40545795/how-do-i-install-composer-php-packages-without-composer

chrisrex commented 2 years ago

Thank you zbateson for your answer. Best regards Christoph

phpfui commented 1 year ago

@chrisrex I don't use composer in production code either. But I use it to manage dependencies. See my article on autoloaders: https://blog.phpfui.com/benchmarking-php-autoloaders

Reach out to me if you want the code to automate this. Much faster and more secure than using composer in production, and you avoid all those require statements.