月別アーカイブ: 2014年11月

Ubuntu VPS Postfix OpenDKIMインストール

ここではUbuntu VPSでopenDKIMのインストールについて解説しています。

OpenDKIM インストール

$ sudo apt-get install opendkim opendkim-tools

OpenDKIM 設定ファイル1

$ sudo vim /etc/opendkim.conf

設定内容

Domain                  example.com
KeyFile                 /etc/postfix/dkim.key
Selector                mail
SOCKET                  inet:8891@localhost

OpenDKIM 設定ファイル2

$ sudo vim /etc/default/opendkim

設定内容

SOCKET="inet:8891@localhost"

Postfix 設定ファイル

$ sudo vim /etc/postfix/main.cf

追加内容

# DKIM
milter_default_action = accept
milter_protocol = 2
smtpd_milters = inet:localhost:8891
non_smtpd_milters = inet:localhost:8891

OpenDKIM key作成

$ opendkim-genkey -t -s mail -d example.com

OpenDKIM keyのコピー

$ cp mail.private /etc/postfix/dkim.key

/etc/opendkim.confのKeyFileで設定した場所に移動します。

OpenDKIM レコードを表示

$ cat mail.txt
mail._domainkey IN TXT "v=DKIM1; k=rsa; t=y; p=MKOonifuenisdnisufmn
hiusdoIUHNLOmOpMgdRdu・・・" ; ----- DKIM key mail for example.com

DNSにレコードを追加する

ホスト名 レコード TTL VALUE
mail._domainkey TXT 5 v=DKIM1; k=rsa; t=y; p=MKOonifuenisdnisufmn・・・

サービス スタート・再起動

$ sudo service opendkim start
$ sudo service postfix restart

OpenDKIMレコード確認コマンド

$ dig mail._domainkey.example.com TXT
;; ANSWER SECTION:
mail._domainkey.example.com. 300 IN   TXT
"v=DKIM1\; k=rsa\; t=y\; p=MKOonifuenisdnisufmn・・・"

となれば成功です。

Ubuntu VPS Postfix送信がスパムに入ってしまう対策 SPFレコード

ここではUbuntu VPS Postfix送信がスパムに入ってしまう対策について解説しています。

DNSにSPFレコードを追加する

ホスト名 レコード TTL VALUE
example.com TXT 5 v=spf1 +ip4:201.111.22.22 -all

VALUEの「201.111.22.22」をご自分のサーバーipアドレスに変更してください。

設定確認

$ nslookup -type=TXT example.com
Non-authoritative answer:
example.com   text = "v=spf1 +ip4:201.111.22.22 -all"

となれば成功です。

Ubuntu VPS Postfix インストール

ここではUbuntu VPSにPostfixをインストールする方法について解説しています。

Postfix インストール

$ sudo apt-get update
$ sudo apt-get install postfix

インストール画面が立ち上がるので、「メール設定の一般形式」をインターネットに選択し、
ホスト名を入力してインストール完了です。

設定ファイル

$ sudo vim /etc/postfix/main.cf

設定項目

mail_name = unknown
myhostname = example.com
mydomain = example.com

最低限この項目でメールの送信ができます。

設定ファイル編集後再起動

$ sudo service postfix start   #起動
$ sudo service postfix restart #再起動

mailコマンド インストール

$ sudo apt-get install mailutils

メール送信 コマンド

$ mail info@example.com
Cc:
Subject: 件名
メッセージ本文

メッセージ本文入力後「Ctrl + d」でメール送信。

メール送信 PHP

<?php

    mb_language('Ja');
    mb_internal_encoding('UTF-8');
    $to = 'to@example.com';
    $subject = '件名';
    $body = "メッセージ内容\n"
          . "¥nは改行を意味します。";
    $from = 'From:'.mb_encode_mimeheader('企業名など').'<from@example.com>';
    mb_send_mail($to, $subject, $body, $from);

メールが届けば設定完了です。

関連記事
Ubuntu VPS Postfix送信がスパムに入ってしまう対策 SPFレコード
http://office-goto.info/linux-ubuntu/postfix-anti-spam/

Ubuntu VPS Postfix OpenDKIMインストール
http://office-goto.info/linux-ubuntu/postfix-opendkim-install/

TCPDF FPDIでPDFファイル生成

ここではTCPDF、FPDIを使ったPHPでのPDFファイルの生成を解説していきます。

tcpdf

TCPDFのダウンロード
http://sourceforge.net/projects/tcpdf/files/

FPDIのダウンロード
http://www.setasign.de/products/pdf-php-solutions/fpdi/downloads/
FPDIはFPDIとFPDI_TPLの2つダウンロードしてください。
FPDI_TPLのfpdf_tpl.phpはFPDI直下に置いてください。

UTF-8で日本語フォント

TCPDF標準フォントならkozgopromediumになりますが数字がうまく表示されなかったのでIPAフォント、TTFファイルのIPA Pゴシックをダウンロードします。
http://ossipedia.ipa.go.jp/ipafont/ipafont/download.html

サンプルソース

<?php
  
    require_once('./tcpdf/tcpdf.php');
    require_once('./fpdi/fpdi.php');
  
    $pdf = new FPDI();
  
    // 余白設定
    $pdf->SetMargins(0, 0, 0);
    // セルパディング設定
    $pdf->SetCellPadding(0);
    // 自動改ページ
    $pdf->SetAutoPageBreak(false);
  
    // ヘッダ、フッダを使用しない
    $pdf->setPrintHeader(false);
    $pdf->setPrintFooter(false);
  
    // 1ページ目を準備
    $pdf->AddPage();
  
    // フォント設定
    $font = $pdf->addTTFfont('./tcpdf/fonts/ipagp.ttf', 'TrueTypeUnicode', '', 32);
    $pdf->SetFont($font, '', 10);
  
    // PDFファイル読み込み
    $pdf->setSourceFile('./pdf/include.pdf');
    $page = $pdf->importPage(1);
    $pdf->useTemplate($page);
  
    // Text
    $pdf->Text(10, 10, 'こんにちは世界');
  
    // 改行
    $pdf->Ln();
  
    // セル
    $pdf->Cell(70, 10, 'セル', 1, 0, 'L');
  
    $pdf->Ln();
  
    // HTML表記
    $pdf->writeHTML('<h1>html表記</h1>', true, 0, true, 0);
  
    // 画像表示
    $pdf->Image('./image/image.jpg', 10, 10);
  
    // PDF出力
    $pdf->Output('sample.pdf', 'D');

解説

$pdf->SetMargins(0, 0, 0); (9行目)
余白の設定をします。

$pdf->SetCellPadding(0); (11行目)
セルパディングを設定します。

$pdf->SetAutoPageBreak(false); (13行目)
自動改ページするかをtrue or falseで指定してください。

$pdf->setPrintHeader(false); (16、17行目)
ヘッダー、フッダーを使用するかをtrue or falseで指定してください。

$pdf->AddPage(); (20行目)
1ペーシ目を準備します。

$pdf->SetFont($font, ”, 10); (24行目)
フォントサイズを設定します。

$pdf->setSourceFile(‘./pdf/include.pdf’); (27~29行目)
テンプレートになるPDFファイルがあれば読み込んでください。

$pdf->Text(10, 10, ‘こんにちは世界’); (32行目)
x座標、y座標、表示する文字列で指定してください。

$pdf->Ln(); (35行目)
PDF内での改行ができます。

$pdf->Cell(70, 10, ‘セル’, 1, 0, ‘L’); (38行目)
セルの幅、高さ、文字列、枠線で囲むかの指定、出力後のカーソルの移動方法、テキストの整列で指定してください。

$pdf->writeHTML(); (43行目)
出力するHTMLテキスト、改行するかしないか、背景の塗つぶし指定、前回の高さ設定を引き継ぐかで指定してください。

$pdf->Image(‘./image/image.jpg’, 10, 10); (46行目)
画像ファイル、x座標、y座標、幅、高さで指定してください。

$pdf->Output(‘sample.pdf’, ‘D’); (49行目)
I: ブラウザに出力する(既定)、保存時のファイル名が$nameで指定した名前になる。
D: ブラウザで(強制的に)ダウンロードする。
F: ローカルファイルとして保存する。
S: PDFドキュメントの内容を文字列として出力する。

関連記事
TCPDF FPDIでPDF読み込みエラーを解消 setSourceFile
http://office-goto.info/php/tcpdf-fpdi-setsourcefile/

CakePHP2.x CakeEmailでメール送信

ここではCakePHP2.xでCakeEmailを使いメールの送信をします。

cakephp

email.phpの設定

/app/Config/email.php

<?php

    class EmailConfig {
   
        public $default = array(
                'transport' => 'Mail',
                'from' => 'info@example.com',
                'emailFormat' => 'text',
        );
    }

text形式で送信する単純な設定ファイルです。

Layoutファイル作成

/app/View/Layouts/Emails/text/layout.ctp

ヘッダ文章
   
<?php echo $content_for_layout; ?>
   
フッダ文章

Layout内でのView読み込みはいつもどおり$content_for_layoutで読み込めます。

Viewファイル作成

/app/View/Emails/text/tmp.ctp

●お名前:<?php echo $name; ?> 様
●フリガナ:<?php echo $furigana; ?> 様

この例では「様」があるので自動的に改行されますが、行の最後に変数が来る場合は自動的に改行されません。

●お名前:<?php echo $name . "\n"; ?>
●フリガナ:<?php echo $furigana . "\n"; ?>

このように改行を入れてください。
※シングルクォーテーションでは改行されません、ダブルクォーテーションを使用してください。

コントローラー内の記述

読み込み

App::uses('CakeEmail', 'Network/Email');

送信

// /app/Config/email.phpの設定読み込み
$email = new CakeEmail('default');
  
// テンプレートに渡す変数
$arrVal = array (
        'name' => '名前',
        'furigana' => 'フリガナ',
);
  
// 送信
$email->template('tmp', 'layout')
      ->viewVars($arrVal)
      ->to('to@example.com')
      ->subject('件名')
      ->send();

解説

$email->template(‘tmp’, ‘layout’); (11行目)
第一引数に読み込むViewファイル、第二引数に読み込むLayoutファイルを指定します。

$email->viewVars($arrVal); (12行目)
Viewファイルに変数を設定します。

$email->to(‘to@example.com’); (13行目)
メールを送信する宛先です。

$email->subject(‘件名’); (14行目)
件名の設定です。

$email->send(); (15行目)
メールの送信です。

最後にCakePHP2.x CakeEmailの公式ドキュメントです。
http://book.cakephp.org/2.0/en/core-utility-libraries/email.html