My ISP
account requires that I send a username & password for outbound SMTP
mail.
How do I get PHP
to use this when executing php.mail()?
The php.ini
file only contains entries for the server (SMTP= )
and From: (sendmail_from= )
.
My ISP
account requires that I send a username & password for outbound SMTP
mail.
How do I get PHP
to use this when executing php.mail()?
The php.ini
file only contains entries for the server (SMTP= )
and From: (sendmail_from= )
.
Found this code as one of the first hits of the google://pear mail attachment
search.
include('Mail.php');
include('Mail/mime.php');
$text = 'Text version of email';
$html = '<html><body>HTML version of email</body></html>';
$file = './files/example.zip';
$hdrs = array(
'From' => 'someone@domain.pl',
'To' => 'someone@domain.pl',
'Subject' => 'Test mime message'
);
$mime = new Mail_mime();
$mime->setTXTBody($text);
$mime->setHTMLBody($html);
$mime->addAttachment($file,'application/octet-stream');
$body = $mime->get();
$hdrs = $mime->headers($hdrs);
$mail =& Mail::factory('mail', $params);
$mail->send('mail@domain.pl', $hdrs, $body);
That's odd, specially since not all the n
s are transliterated and not at a specific position.
Try calling $this->email->set_crlf( "rn" );
as well. Look up the message details in Exchange and inspect the Content-Type
and Charset / Encoding - post the raw thing here so we can inspect it.
I found this in Microsoft Knowledgebase:
Microsoft Exchange uses an enhanced character set. The default MIME character set for Microsoft Exchange is ISO 8859-1. Some gateways do not support the way this character set issues a soft return for line feeds. When this occurs, each line is terminated with an equal sign showing the line break where the gateway's line-length support ends.
are you required to use the & modifier to pass-by-reference?
Technically/semantically, the answer is yes, even with objects. This is because there are two ways to pass/assign an object: by reference or by identifier. When a function declaration contains an &
, as in:
function func(&$obj) {}
The argument will be passed by reference, no matter what. If you declare without the &
function func($obj) {}
Everything will be passed by value, with the exception of objects and resources, which will then be passed via identifier. What's an identifier? Well, you can think of it as a reference to a reference. Take the following example:
class A
{
public $v = 1;
}
function change($obj)
{
$obj->v = 2;
}
function makezero($obj)
{
$obj = 0;
}
$a = new A();
change($a);
var_dump($a);
/*
output:
object(A)#1 (1) {
["v"]=>
int(2)
}
*/
makezero($a);
var_dump($a);
/*
output (same as before):
object(A)#1 (1) {
["v"]=>
int(2)
}
*/
So why doesn't $a
suddenly become an integer after passing it to makezero
? It's because we only overwrote the identifier. If we had passed by reference:
function makezero(&$obj)
{
$obj = 0;
}
makezero($a);
var_dump($a);
/*
output:
int(0)
*/
Now $a
is an integer. So, there is a difference between passing via identifier and passing via reference.
You could do something like create a generic class that could handle out values from a function.
private static class OutValue<T> {
public T value;
static <X> OutValue<X> makeOutValue(X value) {
OutValue<X> outValue = new OutValue<X>();
outValue.value = value;
return outValue;
}
}
Here is an example of how the class could be used to get an integer from a function.
void getInteger(OutValue<Integer> x)
{
x.value = 1;
}
OutValue<Integer> outValue = OutValue.makeOutValue(0);
getInteger(outValue);
System.out.println("value = " + outValue.value);
It is probably not the most elegant overall solution, but it will keep you from having to write a ton of classes if you do not want to do a more involved refactor.
PHP
mail()
command does not support authentication. Your options: