スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

[PHP] 外部メール送信のために Qdsmtp を使ったのだけど Cc: 送信ができなかった件

メールフォームなどよく作っているのですが、
たいていのものは設置したサーバの送信機能を使うんですね。
レンタルサーバなんかじゃ、ほぼそうです。

ただ自社でサーバを持っている場合、そちらを使いたいということがあって、
Webサーバにメールを送る機能がついてないときがあると。
そういう場合に、外部のサーバを使うことになります。

ガリガリ書いてやるとか、PEAR使うとかいろいろ手段はあるとは思うのですが、
労力は省きたいし、それだけのためにPEARを入れるのも面倒だし、
そもそもお客様にPEAR入れてというのも言いにくい話。

そこで1ファイルをインクルードするだけで使えるこいつの出番。

Qdsmtp-Simple SMTP Mailer for PHP - Qdsmtpとは
http://hal456.net/qdsmtp/

使い方も簡単。パラメータとか与えたのち、 mail() と同じようにして使います。

require_once('qdsmtp.php');

$param = array(
'host'=>'smtp.example.com',
'port'=> 25 ,
'from'=>'from@example.com',
'protocol'=>'SMTP',
);
$smtp = & new QdSmtp($param);


こう準備をしてやってから、

$to = 'address@example.com';
$subject = 'Hello!'
$body = 'I am Spok from Valcum ..........Live log and Prosper.';

$smtp ->mail( $to , $subject , $body );


mail() と同じように使ってやる。
ヘッダが必要なら第四引数に書く。これも mail() と同じ。

で、自サーバで送信するときは mail() を使い、外部サーバを利用するときには
これを利用して、同じようにパラメータを投げる……としていたのですが、
どうも Cc: がうまく送信できない。ヘッダに書きこまれているし、メーラでも
Cc: には表示されている。でも Cc: に指定されたアドレスにはメールが届いてない。

まったく意味がわからないながらも解決したのはこんな手順。

1)ヘッダは From: Reply-To: Cc: を指定できるようにしていた
2)これらは前から順に文字列に連結してつくっていき、Cc は指定があれば末尾につく
3)いろいろ試すと、Cc が末尾になると実際の送信はされてない模様
4)Cc: を末尾から移動し、末尾には人畜無害なヘッダ情報を付与した

$addHeader = "From: ".$mail."\r\n";
$addHeader .= "Reply-To: ".$mail_from."\r\n";
//設定されていれば
if( strlen( $mailCc) > 0 ){
$addHeader .= "Cc: ".$mailCc."\r\n";
}
//CCを末尾にするとなぜか送信されないので、冗長な情報を付与する
$addHeader .= "Content-Transfer-Encoding: 7bit\r\n";
$addHeader .= "\r\n";


まったく理解してやってるわけではないのですが、
とりあえず Cc: に送信されない件についてはこれで解決。
RFC とこのライブラリのソースを見れば解かるのでしょうけど。
スポンサーサイト

テーマ : PHP
ジャンル : コンピュータ

[Web] Ajax で ブラウザが IE の場合 XMLHttpRequest がうまく取れない件

たまに忘れてやらかすのでうまくいったスクリプトをメモ。
ようは IE は new XMLHttpRequest(); で取れないので振り分けた上で適切なオブジェクトを使ってやらないといけないとのこと。

これで xmlhttp として取得できるので、あとはブラウザの差で問題はないはず。
(もちろんオブジェクト自体が違うので、サポートしてないメソッドやらプロパティは意識する必要はあるけれど)

もともと ActiveX オブジェクトとして実装されたために云々というややこしい話はあるようだけど、細かいことは置いてこれで Firefox、IE6以降、Opera については確認できたのでいいことにする。細けえことはいいんだよ。いや、よくないんだけど。

あと、必要なのかはわからないけれど、出力されて受け取るべき XML についてはちゃんと ヘッダを打って Contents-Type やら Charaset を指定しておかないと文字化けしたりXMLとして認識してくれないかもしれないので、おかしいなと思ったら合わせて確認下さい。

function getXmlHttpObject() {

var xmlhttp;

//Win InternetExplorer 用
if(window.ActiveXObject){
try {
//Msxml2.XMLHTTP
xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {
//Microsoft.XMLHTTP
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
} catch (e2) {
return false;
}
}
} else if(window.XMLHttpRequest){
//XMLHttpRequest
xmlhttp = new XMLHttpRequest();
} else {
xmlhttp = false;
}
return xmlhttp;
}



<参考>
クラスブラウザで利用できるようにする - Ajaxを用いたHTTP通信 - Ajax入門
http://www.ajaxtower.jp/ini/http/index6.html

XMLHttpRequestオブジェクトを取得するには? | Diaspar Journal
http://diaspar.jp/node/50

IE7用のAjaxはIE6で動かない? - IE7対策は万全ですか--アプリで動作トラブルの不安:ITpro
http://itpro.nikkeibp.co.jp/article/COLUMN/20070710/277219/

[PHP] mb_convert_encoding() でエラー

Q.
正常に動いていたはずのPHPスクリプトが、違うサーバに置いたところ
Warning: mb_convert_encoding(): Illegal character encoding specified in ~
というようなエラーがたくさん出るようになりました。

A.
おそらく、mb_detect_order() の文字コード検出の違いによるものかと思われます。
入力文字の文字コード判別の際に mb_detect_encoding() を使っており、
そこで第二引数(文字エンコーディングのリスト)を省略していませんか?
mb_detect_encoding() で第二引数を明示するか、mb_detect_order() を適切に
設定しましょう。

たとえばこういうこと。

mb_detect_encoding( $_POST['hoge'] );

mb_detect_encoding( $_POST['hoge'] ,"auto" );


また、文字エンコーディングを "auto" とした場合は文字列が短い場合に
思わぬ誤判断をする場合があるので、明示的に指定するのがよいでしょう。

mb_detect_encoding( $_POST['hoge'] ,"ASCII,JIS,UTF-8,EUC-JP,SJIS" );

[PHP / Web] 住所情報を一括で GoogleMaps の座標に変換

APIたたくだけっちゅやあ、たたくだけなんですが。
自分的メモ。

Googleさんに住所文字列を投げるときにはUTF-8にしておくこと。
取得できなかったものに関してはその旨が返ってきます。
下記例で言うと、「関が原ウォーランド」がそうです。

参照:サービス - Google Maps API - Google Code
http://code.google.com/intl/ja/apis/maps/documentation/services.html#Geocoding_Direct






<?php
//調べたい住所を配列で与える
$adr = array(
"東京駅", "熊本城", "東京ディズニーランド",
"大阪城", "関が原ウォーランド","屋久島"
);
$key = "DUMMY"; // ここにはGoogleから取得したキー ■要変更■
$output = "csv"; // 出力形式

//配列をひとつずつAPIに投げる
for( $i = 0; $i < count( $adr ); $i++ ){
$str_adr = urlencode( $adr[$i] );
$api_url = "http://maps.google.com/maps/geo?q=".$adr[$i];
$api_url .= "&key=".$key."&output=".$output;
$buf = file_get_contents( $api_url );
print "<hr>".$adr[$i]."<br>".$buf;
}
?>
検索フォーム
リンク
最新記事
最新コメント
カテゴリ
RSSリンクの表示
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。