SQLの窓

2014年10月18日


PowerShell2.0 : PowerShell のコードだけで TKMP.dll を使用してメールを送信する

関連する記事

PowerShell2.0 : PowerShell 内で VBのコードを記述(TKMP.dllを使用)してメールを送信する

VB.net のコードを埋め込むと、いったんビルドしないと動かなかったですが、Add-Type で TKMP.dll をロードして使うとあっさり動きました。以前はFramework のクラスとメソッドでロードしていたみたいですが、Add-Type でたいてい簡単にアセンブリを使えるように設計されているようです。

TKMP.dll を最初にテストした 2010年4月では、TKMP.dll のバージョンは、2.0.0 でしたが、現在は 3.1.4 です。

▼ DLL ダウンロード
.NET用メール送受信クラスライブラリ (TKMP.DLL)
Add-Type -Path "C:\user\TKMPDLL_3.1.4\TKMP.dll"

$mail = New-Object TKMP.Writer.MailWriter

$ToAddress = "宛先メールアドレス"

# 差出人
$mail.FromAddress = "差出人メールアドレス"
# あて先
$mail.ToAddressList.Add($ToAddress)
# 本文のクラスを作成します
$part = New-Object TKMP.Writer.TextPart("本文`n本文")
#送信メールクラスに本文を登録
$mail.MainPart = $part


# 相手のメーラーで「差出人」として表示
$mail.Headers.Add("From", "わたし <$($mail.FromAddress)>")
# 相手のメーラーで「あて先」として表示されます
$mail.Headers.Add("To", "あなた <$ToAddress>")
# メールの件名
$mail.Headers.Add("Subject", "タイトル")
# 付加情報など
$mail.Headers.Add("X-Mailer", "TKMP Version 3.1.4")

# サーバーへ接続
#------------------------------------------------------
# SMTPサーバーを利用する場合に認証が必要なときは以下のようにインスタンスを作成します
$logon = New-Object TKMP.Net.AuthLogin($mail.FromAddress, "パスワード")
$smtp  = New-Object TKMP.Net.SmtpClient("SMTPサーバー", 587, $logon)

# 接続
if ( $smtp.Connect() -eq $false ) {
	"接続に失敗しました。"
}
else {
	$smtp.SendMail($mail)
	"メールを送信しました"
}

#------------------------------------------------------
# サーバーから切断します
#------------------------------------------------------
$smtp.Close()




posted by lightbox at 2014-10-18 17:00 | PowerShell | このブログの読者になる | 更新情報をチェックする

2014年10月17日


PowerShell2.0 : PowerShell 内で VBのコードを記述(TKMP.dllを使用)して、exe を作成した後実行してメールを送信する

PowerShell2.0 内で VB や C# のコードをヒアドキュメントで記述してビルドして exe を簡単に作成できます

.NET用メール送受信クラスライブラリ (TKMP.DLL)

ライブラリ単体 (TKMPDLL_3.1.4.zip) をダウンロードして適当な場所で解凍してそのまま使います。実行ファイルは、解凍した TKMPDLL_3.1.4 フォルダに作成して、実行後削除します。

参考資料

 PowerShell2.0 : VB.net と C# のコードをビルドして exe を作成する

ここでは、vb を使用していますが、c# でも同じです。

vbc.exe でビルドするのとさほど変わりはありませんが、vbc.exe のパスを気にしないでいいところが簡単になります。
$source = @"
Imports TKMP.Writer
Imports TKMP.Net
Public Class Module1

	Public Shared Sub Main()

		'------------------------------------------------------
		'サーバー情報
		'------------------------------------------------------
		Dim Server As String = "ユーザID.sakura.ne.jp"
		Dim ServerPort As Integer = 587

		'------------------------------------------------------
		'メール情報の作成
		'------------------------------------------------------
		Dim mail As MailWriter = New MailWriter

		'差出人
		mail.FromAddress = "メールユーザ@ユーザID.sakura.ne.jp"
		'あて先
		mail.ToAddressList.Add("あて先メールアドレス")
		'本文のクラスを作成します
		Dim part As TextPart = New TextPart("本文")
		'送信メールクラスに本文を登録
		mail.MainPart = part

		'相手のメーラーで「差出人」として表示
		mail.Headers.Add("From", "わたし <メールユーザ@ユーザID.sakura.ne.jp>")
		'相手のメーラーで「あて先」として表示されます
		mail.Headers.Add("To", "あなた <あて先メールアドレス>")
		'メールの件名
		mail.Headers.Add("Subject", "タイトル")
		'付加情報など
		mail.Headers.Add("X-Mailer", "TKMP Version 3.1.4")

		'------------------------------------------------------
		'サーバーへ接続
		'------------------------------------------------------
		'SMTPサーバーを利用する場合に認証が必要なときは以下のようにインスタンスを作成します
		Dim logon As AuthLogin = New AuthLogin("認証用ユーザ文字列", "パスワード")
		Dim smtp As SmtpClient = New SmtpClient(Server, ServerPort, logon)

		'接続
		If Not smtp.Connect() Then
			System.Console.WriteLine("接続に失敗しました。")
			Return
		End If

		'------------------------------------------------------
		'メール送信を開始します
		'------------------------------------------------------
		smtp.SendMail(mail)

		'------------------------------------------------------
		'サーバーから切断します
		'------------------------------------------------------
		smtp.Close()

		System.Console.WriteLine("メールを送信しました")


	End Sub

End Class
"@
Add-Type `
   -TypeDefinition $source `
   -Language VisualBasic `
   -ReferencedAssemblies C:\user\TKMPDLL_3.1.4\TKMP.dll `
   -OutputAssembly C:\user\TKMPDLL_3.1.4\_mail_action.exe `
   -OutputType ConsoleApplication

C:\user\TKMPDLL_3.1.4\_mail_action.exe
Remove-Item C:\user\TKMPDLL_3.1.4\_mail_action.*

履歴
2010-04-06 : 初回投稿

関連する記事

PowerShell2.0 : PowerShell のコードだけで TKMP.dll を使用してメールを送信する


タグ:PowerShell
posted by lightbox at 2014-10-17 13:39 | PowerShell | このブログの読者になる | 更新情報をチェックする

2014年10月14日


SQLServer の OPENDATASOURCE 関数による Excel の参照( Microsoft.Jet.OLEDB.4.0 と Microsoft.ACE.OLEDB.12.0 )

OPENDATASOURCE 関数を使用可能にするには、まず show advanced options を 1 にして、詳細オプションを可能に設定して反映するために、RECONFIGURE を実行します。その後、Ad Hoc Distributed Queries を 1 に設定してから RECONFIGURE を実行する必要があります
さらに、Excel 2007 以降の(拡張子 .xlsx)で、 Microsoft.ACE.OLEDB.12.0 プロバイダを利用する場合は、以下のコマンドを実行する必要があります

EXEC sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'AllowInProcess', 1
GO
EXEC sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'DynamicParameters', 1
GO
Microsoft ドキュメントsp_configure Microsoft のサンプルのように実行するとエラーになります。設定単位で GO しないとエラーになります。 一度設定すると設定は保持されます。SQL の実行前に毎回行う必要はありません 基本設定
sp_configure 'show advanced options', 1
RECONFIGURE
GO
sp_configure 'Ad Hoc Distributed Queries', 1
RECONFIGURE
GO


Microsoft.ACE.OLEDB.12.0用
EXEC sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'AllowInProcess', 1
GO
EXEC sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'DynamicParameters', 1
GO

それぞれのプロバイダでの実行
select * from
OPENDATASOURCE(
	'Microsoft.Jet.OLEDB.4.0',
	'Data Source="C:\user\data\商品.xls";Extended properties=Excel 8.0'
)...[Sheet1$]

select * from
OPENDATASOURCE(
	'Microsoft.ACE.OLEDB.12.0',
	'Data Source="C:\user\data\商品.xlsx";Extended properties=Excel 12.0'
)...[Sheet1$]


▼ ローカルの SQLServer(SQLExpress)へコマンドプロンプトから接続する一例
sqlcmd -U sa -P password -S .\SQLEXPRESS
sqlcmd を使った資料 SQLExpress 2005( および 2008 ) の接続設定 参考記事 Excel Import to SQL Server using Distributed Queries ( Microsoft.ACE.OLEDB.12.0 を使えるようにする為の処理が記述されていました ) 関連する記事 VBScript : ADO で Excel2007(Excel 2010、Excel 2013) にアクセスする( シートをテーブルとして読み込む ) ( VBScript から直接 Excel を DB として読む為の接続文字列と処理です )
posted by lightbox at 2014-10-14 21:47 | SQLExpress | このブログの読者になる | 更新情報をチェックする

2014年10月13日


Bandicam の静止画を使って、デスクトップキャプチャを効果的に



ダウンロードページ

Bandicam のいいところは、一般的な他のソフトがウインドウ単位や、ドラッグして範囲指定するのに対して、透過ウインドウを利用しているところです。これだと、上の設定ダイアログのような対処(Excelとの連携プレイ)が可能になります。



1) ウインドウ選択

 まず、透過ウインドウの虫眼鏡アイコンをクリックした後に対象ウインドウを選択すると、透過ウインドウがそのウインドウを囲みます。



この時に、このウインドウのサイズを覚えてくれます。そして、第一段階の画像化として、F11 キーでキャプチャします( F11 は設定ダイアログから変更できます )

2) 画像を 『ペイント』 で読み込んで赤枠を付加

画像は、保存先ディレクトリで設定されたフォルダに書き込まれるので、ペイントの画面上にドラッグ&ドロップするか、ファイルメニューから読み込みます。そしてペイントを使う目的として、注意する場所を赤枠で囲んだ後、クリップボードにコピーします。



3) Excel で吹き出しを追加

さらに、画像に効果として『吹き出し』を追加する為に Excel に貼り付けて、その上に吹き出しを追加します。

4) 透過ウインドウで再び画像化

ここで、最初に使った透過ウインドウが役に立ちます。大きさは最初と同じなので、近い位置に移動して矢印キーで微調整後、F11 で画像化します。

設定画面の扱い

最小化ボタンが二つあり、左側だと常駐になり、右側だとタスクバーに表示されます。



(いずれにしても、常駐用のウインドウの中には表示されます)



※ 右がオプションダイアログで、左が透過ウインドウです

透過ウインドウの扱い

透過ウインドウは、実際の操作用のアイコンがタイトル部分に多くありますが、表示・非表示を切り替えるのは、CTRL + ALT + H キー です。それ以外は、通常の静止画だけならば、F11 キーでこと足りるので特別使用する必要はありませんが、以下のようになっています。

▼ GIF アニメーションによる、概要


カメラアイコンは静止画キャプチャーで、REC アイコンは動画のキャプチャー開始です。動画では、無料版はキャプチャー(録画)した動画にロゴ(ウォーターマーク)が表示されます。無料版ではキャプチャー(録画)時間が10分に制限されています。


posted by lightbox at 2014-10-13 18:09 | フリーソフト | このブログの読者になる | 更新情報をチェックする

2014年10月12日


MySQL のプログラムからの経過時間の表現方法( CAST, STR_TO_DATE, GET_FORMAT, DATE_FORMAT, TIMEDIFF )

MySQL で datetime 型に入っているデータを使って、24時間未満の経過時間を取得するのには、TIMEDIFF 関数を使います。

MySQL で出退勤の列を datetime 型で持った場合、列を使用して DATEDIFF と TIMEDIFF で直接計算

しかし、プログラマから実際に渡すのは文字列である事が殆どなので、TIMEDIFF を使う前提条件として、CAST, STR_TO_DATE, GET_FORMAT, DATE_FORMAT 関数が必要になります。

MySQL 5.1 リファレンスマニュアル :: 11.5 日付時刻関数

CAST と STR_TO_DATE は、'(シングルクォート)で表現された日付データを実際の日付データとして MySQL に認識させる為に使用します。STR_TO_DATE 関数を使用する場合は、文字列のフォーマットに合わせてフォーマット文字列を用意する必要があります。また、その文字列をある程度自動で取得する方法が、GET_FORMAT 関数です( 使える場面は限定的ですが )。そして、TIMEDIFF の結果として意味のある部分は時刻部分なので、DATE_FORMAT 関数で時刻部分のみを取り出すようにしいます。
select
   DATE_FORMAT(
     TIMEDIFF(
        STR_TO_DATE('2014/10/12 16:27:43', '%Y/%m/%d %H:%i:%s'),
        STR_TO_DATE('2014/10/11 16:27:44', '%Y/%m/%d %H:%i:%s')
     ), '%H:%i:%s' ) as 経過時間1,

   GET_FORMAT(DATETIME,'JIS') as 標準フォーマット,

   DATE_FORMAT(
      TIMEDIFF(
         STR_TO_DATE('2014-10-12 16:27:43', GET_FORMAT(DATETIME,'JIS')),
         STR_TO_DATE('2014-10-11 16:27:44', GET_FORMAT(DATETIME,'JIS'))
    ), '%H:%i:%s' ) as 経過時間2,

   DATE_FORMAT(
      TIMEDIFF(
         CAST('2014-10-12 16:27:43' as datetime),
         CAST('2014-10-11 16:27:44' as datetime)
    ), '%H:%i:%s' ) as 経過時間3


上の SQL の実行結果は以下のようになります





タグ:MySQL
posted by lightbox at 2014-10-12 16:31 | MySQL | このブログの読者になる | 更新情報をチェックする

2014年10月11日


MySQL で出退勤の列を datetime 型で持った場合、列を使用して DATEDIFF と TIMEDIFF で直接計算

以下のような単純な表を考えた場合、当日の勤務時間の計算としては、TIMEDIFF 関数を使います
create table `出退勤トラン` (
	`社員コード` varchar(4)
	,`日時` date
	,`出勤` datetime
	,`退勤` datetime
	,primary key(`社員コード`)
)

TIMEDIFF と DATEDIFF は、それぞれ時間と日付に対して演算を行います。結果として TIMEDIFF は、時刻表示で経過時間をあらわすため、23:59:59 より大きい経過を実行しようとするとエラーになります。
DATEDIFF は経過日数を整数で表すのですが、日付部分が変わると、経過時間が 1 秒でも 1 日を返します
select 
	社員コード,
	退勤,
	出勤,
	TIMEDIFF(退勤,出勤) as 経過時間,
	DATEDIFF(退勤,出勤) as 経過日数
 from 出退勤トラン

▼ SQL 実行の結果
社員コード 退勤 出勤 経過時間 経過日数
0001 2014/10/12 16:27:44 2014/10/11 16:27:45 2014/10/11 23:59:59 1
0002 2014/10/11 16:27:46 2014/10/11 16:27:45 2014/10/11 0:00:01 0
0003 2014/10/12 0:00:01 2014/10/11 16:27:45 2014/10/11 7:32:16 1
0004 2014/10/11 23:59:59 2014/10/11 16:27:45 2014/10/11 7:32:14 0
0005 2014/10/12 2014/10/11 23:59:59 2014/10/11 0:00:01 1
※ 経過時間の日付部分は、SQLを実行した日の日付です


タグ:MySQL
posted by lightbox at 2014-10-11 17:26 | MySQL | このブログの読者になる | 更新情報をチェックする
Seesaa の各ページの表示について
Seesaa の 記事がたまに全く表示されない場合があります。その場合は、設定> 詳細設定> ブログ設定 で 最新の情報に更新の『実行ボタン』で記事やアーカイブが最新にビルドされます。

Seesaa のページで、アーカイブとタグページは要注意です。タグページはコンテンツが全く無い状態になりますし、アーカイブページも歯抜けページはコンテンツが存在しないのにページが表示されてしまいます。

また、カテゴリページもそういう意味では完全ではありません。『カテゴリID-番号』というフォーマットで表示されるページですが、実際存在するより大きな番号でも表示されてしまいます。

※ インデックスページのみ、実際の記事数を超えたページを指定しても最後のページが表示されるようです

対処としては、このようなヘルプ的な情報を固定でページの最後に表示するようにするといいでしょう。具体的には、メインの記事コンテンツの下に『自由形式』を追加し、アーカイブとカテゴリページでのみ表示するように設定し、コンテンツを用意するといいと思います。


※ エキスパートモードで表示しています

アーカイブとカテゴリページはこのように簡単に設定できますが、タグページは HTML 設定を直接変更して、以下の『タグページでのみ表示される内容』の記述方法で設定する必要があります

<% if:page_name eq 'archive' -%>
アーカイブページでのみ表示される内容
<% /if %>

<% if:page_name eq 'category' -%>
カテゴリページでのみ表示される内容
<% /if %>

<% if:page_name eq 'tag' -%>
タグページでのみ表示される内容
<% /if %>
この記述は、以下の場所で使用します
container 終わり



フリーフォントで簡単ロゴ作成
フリーフォントでボタン素材作成
フリーフォントで吹き出し画像作成
フリーフォントではんこ画像作成
ほぼ自由に利用できるフリーフォント
フリーフォントの書体見本とサンプル
画像を大きく見る為のウインドウを開くボタンの作成

CSS ドロップシャドウの参考デモ
イラストAC
ぱくたそ
写真素材 足成
フリーフォント一覧
utf8 文字ツール
右サイド 終わり
base 終わり