Added feature #15998: Create a new API to send mails based on SwiftMailer to replace...
[Packages/TYPO3.CMS.git] / typo3 / contrib / swiftmailer / classes / Swift / Mime / ContentEncoder / QpContentEncoder.php
1 <?php
2
3 /*
4 * This file is part of SwiftMailer.
5 * (c) 2004-2009 Chris Corbyn
6 *
7 * For the full copyright and license information, please view the LICENSE
8 * file that was distributed with this source code.
9 */
10
11 //@require 'Swift/Mime/ContentEncoder.php';
12 //@require 'Swift/Encoder/QpEncoder.php';
13 //@require 'Swift/InputByteStrean.php';
14 //@require 'Swift/OutputByteStream.php';
15 //@require 'Swift/CharacterStream.php';
16
17 /**
18 * Handles Quoted Printable (QP) Transfer Encoding in Swift Mailer.
19 * @package Swift
20 * @subpackage Mime
21 * @author Chris Corbyn
22 */
23 class Swift_Mime_ContentEncoder_QpContentEncoder extends Swift_Encoder_QpEncoder
24 implements Swift_Mime_ContentEncoder
25 {
26
27 /**
28 * Creates a new QpContentEncoder for the given CharacterStream.
29 * @param Swift_CharacterStream $charStream to use for reading characters
30 * @param Swift_StreamFilter $filter if canonicalization should occur
31 */
32 public function __construct(Swift_CharacterStream $charStream,
33 Swift_StreamFilter $filter = null)
34 {
35 parent::__construct($charStream, $filter);
36 }
37
38 /**
39 * Encode stream $in to stream $out.
40 * QP encoded strings have a maximum line length of 76 characters.
41 * If the first line needs to be shorter, indicate the difference with
42 * $firstLineOffset.
43 * @param Swift_OutputByteStream $os output stream
44 * @param Swift_InputByteStream $is input stream
45 * @param int $firstLineOffset
46 * @param int $maxLineLength
47 */
48 public function encodeByteStream(
49 Swift_OutputByteStream $os, Swift_InputByteStream $is, $firstLineOffset = 0,
50 $maxLineLength = 0)
51 {
52 if ($maxLineLength > 76 || $maxLineLength <= 0)
53 {
54 $maxLineLength = 76;
55 }
56
57 $thisLineLength = $maxLineLength - $firstLineOffset;
58
59 $this->_charStream->flushContents();
60 $this->_charStream->importByteStream($os);
61
62 $currentLine = '';
63 $prepend = '';
64 $size=$lineLen=0;
65
66 while (false !== $bytes = $this->_nextSequence())
67 {
68 //If we're filtering the input
69 if (isset($this->_filter))
70 {
71 //If we can't filter because we need more bytes
72 while ($this->_filter->shouldBuffer($bytes))
73 {
74 //Then collect bytes into the buffer
75 if (false === $moreBytes = $this->_nextSequence(1))
76 {
77 break;
78 }
79
80 foreach ($moreBytes as $b)
81 {
82 $bytes[] = $b;
83 }
84 }
85 //And filter them
86 $bytes = $this->_filter->filter($bytes);
87 }
88
89 $enc = $this->_encodeByteSequence($bytes, $size);
90 if ($currentLine && $lineLen+$size >= $thisLineLength)
91 {
92 $is->write($prepend . $this->_standardize($currentLine));
93 $currentLine = '';
94 $prepend = "=\r\n";
95 $thisLineLength = $maxLineLength;
96 $lineLen=0;
97 }
98 $lineLen+=$size;
99 $currentLine .= $enc;
100 }
101 if (strlen($currentLine))
102 {
103 $is->write($prepend . $this->_standardize($currentLine));
104 }
105 }
106
107 /**
108 * Get the name of this encoding scheme.
109 * Returns the string 'quoted-printable'.
110 * @return string
111 */
112 public function getName()
113 {
114 return 'quoted-printable';
115 }
116
117 }