Source for file SMTP.php
Documentation is available at SMTP.php
* This file contains the code for an SMTP transport layer.
* This code is still a rough and untested draft.
* switch to pear mail stuff
* ability to define smtp options (encoding, from, etc.)
* LICENSE: This source file is subject to version 2.02 of the PHP license,
* that is bundled with this package in the file LICENSE, and is available at
* through the world-wide-web at http://www.php.net/license/2_02.txt. If you
* did not receive a copy of the PHP license and are unable to obtain it
* through the world-wide-web, please send a note to license@php.net so we can
* mail you a copy immediately.
* @author Shane Caraveo <Shane@Caraveo.com>
* @author Jan Schneider <jan@horde.org>
* @copyright 2003-2006 The PHP Group
* @license http://www.php.net/license/2_02.txt PHP License 2.02
* @link http://pear.php.net/package/SOAP
require_once 'SOAP/Transport.php';
require_once 'Mail/smtp.php';
* SMTP Transport for SOAP
* Implements SOAP-SMTP as defined at
* http://www.pocketsoap.com/specs/smtpbinding/
* @todo use PEAR smtp and Mime classes
* @author Shane Caraveo <shane@php.net>
* @author Jan Schneider <jan@horde.org>
* SOAP_Transport_SMTP Constructor
* @param string $url mailto: address.
parent ::SOAP_Base ('SMTP');
* Sends and receives SOAP data.
* @param string Outgoing SOAP data.
* @return string|SOAP_Fault
function send($msg, $options = array ())
if (!$this->_validateUrl ()) {
if (!$options || !isset ($options['from'])) {
return $this->_raiseSoapFault ('No From: address to send message with');
if (isset ($options['host'])) $this->host = $options['host'];
if (isset ($options['port'])) $this->port = $options['port'];
if (isset ($options['auth'])) $this->auth = $options['auth'];
if (isset ($options['username'])) $this->username = $options['username'];
if (isset ($options['password'])) $this->password = $options['password'];
$headers['From'] = $options['from'];
$headers['X-Mailer'] = $this->_userAgent;
$headers['MIME-Version'] = '1.0';
$headers['Message-ID'] = md5(time()) . '.soap@' . $this->host;
$headers['To'] = $this->urlparts['path'];
if (isset ($options['soapaction'])) {
$headers['Soapaction'] = " \"{$options['soapaction']}\"";
if (isset ($options['headers']))
// If the content type is already set, we assume that MIME encoding is
if (isset ($headers['Content-Type'])) {
// Do a simple inline MIME encoding.
$headers['Content-Disposition'] = 'inline';
$headers['Content-Type'] = " text/xml; charset=\"$this->encoding\"";
if (isset ($options['transfer-encoding'])) {
if (strcasecmp($options['transfer-encoding'], 'quoted-printable') == 0 ) {
$headers['Content-Transfer-Encoding'] = $options['transfer-encoding'];
} elseif (strcasecmp($options['transfer-encoding'],'base64') == 0 ) {
$headers['Content-Transfer-Encoding'] = 'base64';
return $this->_raiseSoapFault (" Invalid Transfer Encoding: {$options['transfer-encoding']}" );
$headers['Content-Transfer-Encoding'] = 'base64';
$headers['Subject'] = isset ($options['subject']) ? $options['subject'] : 'SOAP Message';
foreach ($headers as $key => $value) {
$header_text .= " $key: $value\n";
'username' => $this->username,
'password' => $this->password,
$mailer = new Mail_smtp ($mailer_params);
$result = $mailer->send ($this->urlparts['path'], $headers, $out);
if (!PEAR ::isError ($result)) {
$val = new SOAP_Value('Message-ID', 'string', $headers['Message-ID']);
$sval[] = new SOAP_Value('faultcode', 'QName', SOAP_BASE ::SOAPENVPrefix (). ':Client');
$sval[] = new SOAP_Value('faultstring', 'string', " couldn't send SMTP message to {$this->urlparts['path']}" );
$methodValue = new SOAP_Value('Response', 'Struct', array ($val));
* Sets data for HTTP authentication, creates Authorization header.
* @param string $username Username.
* @param string $password Response data, minus HTTP headers.
$this->username = $username;
$this->password = $password;
* Validates url data passed to constructor.
$this->_raiseSoapFault (" Unable to parse URL $this->url");
if (!isset ($this->urlparts['scheme']) ||
$this->_raiseSoapFault (" Unable to parse URL $this->url");
$this->_raiseSoapFault (" Unable to parse URL $this->url");
Documentation generated on Mon, 04 Aug 2008 20:00:31 -0400 by phpDocumentor 1.4.0. PEAR Logo Copyright © PHP Group 2004.
|