mail-mime-parser icon indicating copy to clipboard operation
mail-mime-parser copied to clipboard

Use without composer

Open chrisrex opened this issue 3 years ago • 4 comments

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);     // [email protected]
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();                                      // [email protected]

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

chrisrex avatar Mar 12 '22 06:03 chrisrex

@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 avatar Mar 14 '22 20:03 zbateson

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

zbateson avatar Mar 14 '22 20:03 zbateson

Thank you zbateson for your answer. Best regards Christoph

chrisrex avatar Mar 15 '22 05:03 chrisrex

@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.

phpfui avatar Dec 27 '22 17:12 phpfui