Jiro Laboratory

C#、ASP.NET、JavaScript、Androidとか

JavaMailでGmailを使う

Java側での必要最小限の設定は以下。

Properties props = new Properties();
props.put("mail.smtp.host", "smtp.gmail.com");
props.put("mail.smtp.port", "587");
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.starttls.enable", "true");
session = Session.getInstance(props, new DefaultAuthenticator("アカウントID", "パスワード")); 

ただし、これだけだと以下のエラーが返ってきます。

Please log in via your web browser and then try again.
Learn more at
https://support.google.com/mail/answer/78754 e130sm494606pfh.85 - gsmtp 

Gmailのアカウント情報 → ログインとセキュリティ → 安全性の低いアプリの許可: 有効 で実行できるようになります。

PowerShell から Oracle に接続(ODP.NET)

Oracle Client がなくても、ODAC(ODP.NET)さえインストールすれば、PowerShellからOracleに接続できます。

ODACのインストールと環境設定

ODACのダウンロード

XCopy版をダウンロードします。(要Oracleアカウント:無料)
64ビットのOracle Data Access Components(ODAC)のダウンロード

PowerShell .NET Frameworkのバージョンを確認

PowerShellでデフォルトで使われる.NET Framework のバージョンにはOSにより2系と4系の2種類があるので確認します。
PowerShellを起動して

PS C:\> $PSVersionTable

Name                           Value
----                           -----
PSVersion                      5.1.16299.251
PSEdition                      Desktop
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0...}
BuildVersion                   10.0.16299.251
CLRVersion                     4.0.30319.42000
WSManStackVersion              3.0
PSRemotingProtocolVersion      2.3
SerializationVersion           1.1.0.1

CLRVersion が .NET Framework のバージョンです。
この場合は4系ですね。
※2系であっても、PowerShell.exe.config を作成することで4系にできますが、ここでは割愛。

ODACのインストール

ダウンロードしたODACのzipファイルを解凍し、解凍したフォルダに移動して、PowerShell .NET Framework バージョンに合わせて以下のいずれかをインストールします。

.NET Framework が2系の場合
install.bat odp.net2 c:\oracle odac
.NET Framework が4系の場合
install.bat odp.net4 c:\oracle odac 

c:\oracle はインストール先のパスになりますのでお好みで。

システム環境変数PATHの設定

インストールフォルダに応じ、以下の2つを追加します。

c:\oracle
c:\oracle\bin

サンプルスクリプト(test.ps1)

[Reflection.Assembly]::LoadFile("C:\oracle\odp.net\bin\4\Oracle.DataAccess.dll")
$constr = "Data Source=サーバーアドレス/サービス名;User Id=scott;Password=tiger;"
$conn = New-Object Oracle.DataAccess.Client.OracleConnection($constr)
$conn.Open()

$sql = "select * from emp"
$command = New-Object Oracle.DataAccess.Client.OracleCommand($sql, $conn)
$reader = $command.ExecuteReader()
while ($reader.Read())
{
    $value = $reader["EMPNO"].toString() + " " + $reader["ENAME"].toString()
    $value
}
$command.Dispose()

$sql = "update emp set ENAME = 'SMITH' where EMPNO = 7369"
$command = New-Object Oracle.DataAccess.Client.OracleCommand($sql, $conn)
$command.ExecuteNonQuery();
$command.Dispose() 

$conn.Close() 

2系の場合は最初の行が

[Reflection.Assembly]::LoadFile("C:\oracle\odp.net\bin\2.x\Oracle.DataAccess.dll")

になります。

実行

powershell.exe -ExecutionPolicy RemoteSigned -File test.ps1 

小ネタですが、powershellの引数に -ExecutionPolicy RemoteSigned を渡すことでPowerShellのデフォルト設定を変更せずにスクリプトを実行できます。