スポンサーサイト

  • このエントリーを含むはてなブックマーク
  • Yahoo!ブックマークに登録
    上記の広告は1ヶ月以上更新のないブログに表示されています。
    新しい記事を書く事で広告が消せます。

    無料で空メール

  • このエントリーを含むはてなブックマーク
  • Yahoo!ブックマークに登録

    手付かずだったPHPListですが、eticketでの受信メール処理に手をつけるのに前後して、
    受信メール処理を勉強する意味もこめて、空メールを送ることで、PHPListにsubscribeする
    独立したソースを書きました。

    携帯電話からの登録などで、だいぶ当たり前になってきていますので、
    今後きちんと実装して、登録だけでなく停止に関しても実装できればと考えています。
    現状では、どのリストに登録するかソース上の変数で直接指定することを想定しています。
    また、自動での応答メールは通常の登録時のメールと同じです。

    まだ、最低限を実装しただけで、blacklistの処理など考慮したいポイントなどありますが、
    ソースだけご覧頂いてご意見頂ける様にしたいと思います。

    mimeDecodeが必須です。

    今回は、こちらを特に参考にさせて頂きました。

    また、携帯電話向けにメールを送る場合は、こちらで非常に詳細な記述をされています。
    参考になります。

    絵文字とか、携帯向けエントリーページとか、やっておきたいことは多いですが、
    それは、いずれかの機会で。

    使い方としましては、
    空メールを受け取りたいアドレスを決め、/etc/aliasesに下記の様に記載します。
    例えば、empty@~というアドレスで空メールを受けたい場合は、


    empty: "| /usr/bin/php /var/www/html/lists/mail_subscribe.php"



    という感じです。
    newaliasesを忘れずに。

    確認のコメントなどが汚く残っています。
    ご容赦ください。


    mail_subscribe.php 空メール処理





    require_once dirname(__FILE__) .'/admin/commonlib/lib/magic_quotes.php';
    require_once dirname(__FILE__).'/admin/init.php';

    //require_once dirname(__FILE__)."/admin/phpmailer/class.phpmailer.php";
    include "config/config.php";

    $GLOBALS["database_module"] = basename($GLOBALS["database_module"]);
    $GLOBALS["language_module"] = basename($GLOBALS["language_module"]);

    require_once dirname(__FILE__).'/admin/'.$GLOBALS["database_module"];
    require_once dirname(__FILE__)."/texts/english.inc";
    include_once dirname(__FILE__)."/texts/japanese.inc";
    require_once dirname(__FILE__)."/admin/defaultconfig.inc";
    require_once dirname(__FILE__).'/admin/connect.php';
    include_once dirname(__FILE__)."/admin/languages.php";
    include_once dirname(__FILE__)."/admin/lib.php";
    $I18N= new phplist_I18N();
    require_once dirname(__FILE__)."/admin/date.php";
    $date = new Date();

    require_once 'Mail/mimeDecode.php';

    mb_language("japanese");
    mb_internal_encoding("UTF-8");

    $source = file_get_contents("php://stdin");
    if(!$source){
    exit();
    }

    //解析
    $decoder = new Mail_mimeDecode($source);
    $structure = $decoder->decode($params);

    //送信元取得
    $from = $structure->headers['from'];
    $from = mb_decode_mimeheader($from);
    $from = mb_convert_encoding($from, mb_internal_encoding(), 'auto');
    if(preg_match( '/<(.*?)>$/', $from, $match)){
    $from =$match[1];
    }
    $from = trim($from);
    $from = strtolower($from);

    //subscribemailの初期値
    $email = $from;
    $htmlemail = "1";
    $id = 1;
    $key = 2;
    $rssfrequency = "";


    $result = Sql_query("select * from {$GLOBALS["tables"]["user"]} where email = \"$email\"");#"
    if (isset($_POST['rssfrequency'])) {
    $rssfrequency = validateRssFrequency($_POST['rssfrequency']);
    } else {
    $rssfrequency = '';
    }

    if (!Sql_affected_rows()) {
    # they do not exist, so add them
    $query = sprintf('insert into %s (email,entered,uniqid,confirmed,
    htmlemail,subscribepage,rssfrequency) values("%s",now(),"%s",0,%d,%d,"%s")',
    $GLOBALS["tables"]["user"],addslashes($email),getUniqid(),$htmlemail,$id,
    $rssfrequency);
    $result = Sql_query($query);
    $userid = Sql_Insert_Id();
    addSubscriberStatistics('total users',1);
    } else {
    # they do exist, so update the existing record
    # read the current values to compare changes
    $old_data = Sql_fetch_array($result);
    if (ASKFORPASSWORD && $old_data["password"]) {
    if (ENCRYPTPASSWORD) {
    $canlogin = md5($_POST["password"]) == $old_data["password"];
    } else {
    $canlogin = $_POST["password"] == $old_data["password"];
    }
    if (!$canlogin) {
    $msg = $GLOBALS["strUserExists"];
    $msg .= '

    '.$GLOBALS["strUserExistsExplanationStart"].
    sprintf('%s',getConfig("preferencesurl"),$email,
    $GLOBALS["strUserExistsExplanationLink"]).
    $GLOBALS["strUserExistsExplanationEnd"];
    return;
    }
    }

    $userid = $old_data["id"];
    $old_data = array_merge($old_data,getUserAttributeValues('',$userid));
    // $history_entry = 'http://'.getConfig("website").$GLOBALS["adminpages"].'/?page=user&id='.$userid."\n\n";

    $query = sprintf('update %s set email = "%s",htmlemail = %d,subscribepage = %d,rssfrequency = "%s" where id = %d',$GLOBALS["tables"]["user"],addslashes($email),$htmlemail,$id,$rssfrequency,$userid);
    $result = Sql_query($query);
    }

    //echo $userid;

    # subscribe to the lists $lists = '';
    $result = Sql_query("replace into {$GLOBALS["tables"]["listuser"]} (userid,listid,entered) values ($userid,$key,now())");
    $lists .= "\n * ".listname($key);
    addSubscriberStatistics('subscribe',1,$key);


    $subscribemessage = ereg_replace('\[LISTS\]', $lists, getUserConfig("subscribemessage:$id",$userid));

    $blacklisted = isBlackListed($email);

    //$dip_mes = $email.getConfig("subscribesubject:$id").$subscribemessage.system_messageheaders($email).$envelope;
    //$dip_mes = $subscribemessage;
    //echo $dip_mes;
    if(!$blacklisted){
    if (sendMail($email, getConfig("subscribesubject:$id"), $subscribemessage,system_messageheaders($email),$envelope,1))
    {
    sendAdminCopy("Lists subscription","\n".$email . " has subscribed\n\n$history_entry");
    addUserHistory($email,$history_subject,$history_entry);
    print $thankyoupage;
    } else {
    print '

    '.$strEmailFailed.'

    ';
    // if ($blacklisted) {
    // print '

    '.$GLOBALS['I18N']->get('YouAreBlacklisted').'

    ';
    // }
    }
    }

    //if (!$mail->Send()){
    // echo("メールが送信できませんでした。エラー:".$mail->ErrorInfo);
    //}

    ?>




    スポンサーサイト

    theme : Linux
    genre : コンピュータ

    comment

    Secret

    ご案内
    google検索
    カスタム検索
    カテゴリ
    最新記事
    Amazon
    カテゴリー&RSS
    RSS新着情報

    plugin by F.B

    検索フォーム
    最近のコメント(コンパクト)
    データ取得中...
    リンク
    フリーエリア
    RSSリンクの表示
    カレンダー
    09 | 2017/03 | 10
    - - - 1 2 3 4
    5 6 7 8 9 10 11
    12 13 14 15 16 17 18
    19 20 21 22 23 24 25
    26 27 28 29 30 31 -
    ブックマーク
    Yahoo!ブックマークに登録
  • | このエントリーを含むはてなブックマーク
  • 月別アーカイブ
    最新トラックバック
    上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。