1<?php
2// (c) Copyright by authors of the Tiki Wiki CMS Groupware Project
3//
4// All Rights Reserved. See copyright.txt for details and a complete list of authors.
5// Licensed under the GNU LESSER GENERAL PUBLIC LICENSE. See license.txt for details.
6// $Id$
7
8class OpenPGP_Zend_Mail_Transport_Smtp extends Zend\Mail\Transport\Sendmail
9{
10	/**
11	 * Prepare header string from message
12	 *
13	 * @param  Message $message
14	 * @return string
15	 */
16	protected function prepareHeaders(Zend\Mail\Message $message)
17	{
18		$originalSubject = '';
19
20		$headers = $message->getHeaders();
21		if ($headers->has('Subject')) {
22			$subjectHeader = $headers->get('Subject');
23			$originalSubject = $subjectHeader->getFieldValue();
24		}
25
26		$body = $message->getBody();
27		if ($body instanceof Zend\Mime\Message) {
28			$parts = $body->getParts();
29			foreach ($parts as $part) {
30				/* @var $part Zend\Mime\Part */
31				if ($part->getType() == Zend\Mime\Mime::TYPE_HTML) {
32					$part->setContent("******** PGP/MIME-ENCRYPTED MESSAGE ********<br>\n"
33							. "Subject: "
34							. $originalSubject
35							. "<br><br>\n"
36							. $part->getContent());
37				}
38				if ($part->getType() == Zend\Mime\Mime::TYPE_TEXT) {
39					$part->setContent("******** PGP/MIME-ENCRYPTED MESSAGE ********\n"
40							. "Subject: "
41							. $originalSubject
42							. "\n\n"
43							. $part->getContent());
44				}
45			}
46		} else {
47			$message->setBody("******** PGP/MIME-ENCRYPTED MESSAGE ********\n"
48					. "Subject: "
49					. $originalSubject
50					. "\n\n"
51					. $body);
52		}
53
54		$originalHeaders = parent::prepareHeaders($message);
55		$originalBody = parent::prepareBody($message);
56
57		$recipients = [];
58		foreach ($message->getTo() as $destination) {
59			$recipients[] = $destination->getEmail();
60		}
61		foreach ($message->getCc() as $destination) {
62			$recipients[] = $destination->getEmail();
63		}
64		foreach ($message->getBcc() as $destination) {
65			$recipients[] = $destination->getEmail();
66		}
67
68		global $openpgplib;
69		$pgpmime_msg = $openpgplib->prepareEncryptWithZendMail($originalHeaders, $originalBody, $recipients);
70		$headers = $pgpmime_msg[0]; // set pgp/mime headers from result array
71		$this->OpenGPGStoreMailBody = $pgpmime_msg[1];    // set pgp/mime encrypted message body from result array
72
73		return $headers;
74	}
75
76	/**
77	 * Prepare body string from message
78	 *
79	 * @param  Message $message
80	 * @return string
81	 */
82	protected function prepareBody(Zend\Mail\Message $message)
83	{
84		return $this->OpenGPGStoreMailBody;
85	}
86}
87