{'_action'} eq 'store_article') { &store_article($mib,$e); } ... #メールをmysqlに書き込む sub store_article { my ($mib, $e) = @_; my ($subject,$body,$date,$hdate); my ($ml, $query, $res,$dt); $hdate = $e->{'h:Date:'}; $hdate =~ s/ (JST) //; $date = " "; use DateTime::Format::Strptime; use DateTime::Format::MySQL; my $strp = DateTime::Format::Strptime->new(pattern => '%a, %d %b %Y %H:%M:%S %z', on_error => 'croak' ); $dt = $strp->parse_datetime($hdate); $date = DateTime::Format::MySQL->format_datetime($dt); $addr = $addr || $mib->{'_address'}; $addr = &main::LowerDomain($addr); $ml = $mib->{'_ml_acct'}; &main::Log("$mib->{'_action'} $addr"); $body = $e->{'Body'}; $subject = $e->{'h:Subject:'}; $res = $dbh->prepare("insert into article values (?, ?, ?, ?,?)"); $res->execute($mib->{'_article_id'}, $body, $addr, $subject,$date); if ($mib->{'error'}) { return $NULL;} } ... phpでメールを表示する $sql = "select * from article order by date desc"; $result = $con->query($sql); echo "メーリングリスト(一斉メール)の記録"; while($rows = $result->fetch_array(MYSQLI_ASSOC)){ $subject = mb_decode_mimeheader($rows['Subject']); $body = nl2br(mb_convert_encoding($rows['body'], "UTF-8", mb_detect_encoding($rows['body']))); echo "{$rows['date']} {$subject} "; echo "メールアドレス:{$rows['addr']}"; echo $body.""; } " />

itoigawabass

itoigawaのブログ

fmlをmysqlと連動させる

2015-04-10

メーリングリストfmlでmysqlデータベースでメールアドレスを管理する。
mysqldriver.plは databases/mysql/toymodel.plを使用する。
すでに稼働中であったのでmembersの内容をmysqlに手入力した。

create table ml (
    ml varchar(64),
    file varchar(64),
    address varchar(64),
    off int(11),
    options varchar(64)
  );

config.pl
$USE_DATABASE                = 1;
$DATABASE_METHOD             = "mysql";
$DATABASE_DRIVER             = "mysqldriver.pl";
$SQL_SERVER_HOST             = "example.com";
$SQL_SERVER_PORT             = "3306";
$SQL_SERVER_USER             = "user";
$SQL_DATABASE_NAME           = "DB_NAME";
$SQL_SERVER_PASSWORD         = "password";

メール内容をデータベースに保存しwebで使用する。
create table article (
    id int(11),
    body text,
    addr varchar(64),
    Subject varchar(64),
    date datetime
  );

mysqldriver.plを編集する。
mysqldriver.pl
...
   elsif ($mib->{'_action'} eq 'store_article') {
     &store_article($mib,$e);
   }

...

#メールをmysqlに書き込む
sub store_article
{
    my ($mib, $e) = @_;
    my ($subject,$body,$date,$hdate);
    my ($ml, $query, $res,$dt);
    $hdate = $e->{'h:Date:'};
    $hdate =~ s/ (JST) //;
    $date = " ";
    use DateTime::Format::Strptime;
    use DateTime::Format::MySQL;
    my $strp = DateTime::Format::Strptime->new(pattern => '%a, %d %b %Y %H:%M:%S %z', on_error => 'croak' );
    $dt = $strp->parse_datetime($hdate);
    
    $date = DateTime::Format::MySQL->format_datetime($dt);
    $addr = $addr || $mib->{'_address'};
    $addr = &main::LowerDomain($addr);
    $ml   = $mib->{'_ml_acct'};

    &main::Log("$mib->{'_action'} $addr");
    $body = $e->{'Body'};
    $subject = $e->{'h:Subject:'};
    $res = $dbh->prepare("insert into article values (?, ?, ?, ?,?)");
    $res->execute($mib->{'_article_id'}, $body, $addr, $subject,$date);
    if ($mib->{'error'}) { return $NULL;}

}
...

phpでメールを表示する
$sql = "select * from article order by date desc";
$result = $con->query($sql);
echo "
メーリングリスト(一斉メール)の記録
"; while($rows = $result->fetch_array(MYSQLI_ASSOC)){ $subject = mb_decode_mimeheader($rows['Subject']); $body = nl2br(mb_convert_encoding($rows['body'], "UTF-8", mb_detect_encoding($rows['body']))); echo "
{$rows['date']} {$subject}
"; echo "
メールアドレス:{$rows['addr']}

"; echo $body."
"; }

カテゴリー:サーバー
タグ: