.NET環境からのメール送信について、検証用にいくつかの方法を試したときのメモです。

  • Windowsの規定のアプリで設定されているメーラーを起動

送信先のメールアドレス、件名、本文が設定された状態でWindowsの規定のアプリで設定されているメーラーが起動します。
この方法ではメールの送信を行うことはできませんが、たった1行で編集画面に最低限の初期値を流し込むことができるので便利です。

CCやBCCも「&cc=《CC先メールアドレス》」「&bcc=《BCC先メールアドレス》」とパラメータをつなげることで設定可能です。

System.Diagnostics.Process.Start("mailto:" & 《送信先メールアドレス》 & "?subject=" & Uri.EscapeDataString(《件名》) & "&body=" & Uri.EscapeDataString(《本文》))
  • Outlookを使用してメール送信

WindowsにインストールされているOutlookを使いメールを送信します。
送信に使用するメールサーバなどの設定はOutlookで設定されているものを使用し、送信したメールはOutlookの『送信済みアイテム』に残るので便利です。

Dim app As Object
Dim item As Object

app = CreateObject("Outlook.Application")

item = app.CreateItem(0)    ' 0 = OlItemType.olMailItem
item.To = "《送信先メールアドレス》"
item.Subject = "《件名》"
item.Body = "《本文》"

item.Send()

app.Quit()

  • MailKitを使用してメール送信

MailKit( https://github.com/jstedfast/MailKit )を使いメールを送信します。
MailKitはNuGet経由などであらかじめインストールされている必要があります。
この方法は、依存するライブラリやソフトが非常に少なく.NET Coreでも使用可能です。また、送信に関する多くの項目を自分で設定できるので便利です。

Dim mimeMessage As New MimeKit.MimeMessage

mimeMessage.From.Add(New MimeKit.MailboxAddress("《送信元氏名》", "《送信元メールアドレス》"))
mimeMessage.To.Add(New MimeKit.MailboxAddress("《送信先氏名》", "《送信先メールアドレス》"))
mimeMessage.Subject = "《件名》"
mimeMessage.Body = New MimeKit.TextPart(MimeKit.Text.TextFormat.Plain) With {.Text = "《本文》"}

Using client As New MailKit.Net.Smtp.SmtpClient()
    client.Connect("《SMTPホスト》", 《SMTPポート番号》, MailKit.Security.SecureSocketOptions.Auto)
    client.Authenticate("《SMTPユーザ名》", "《パスワード》")
    client.Send(mimeMessage)
    client.Disconnect(True)
End Using

Androitタブレットの設定を行っているとき、Googleアカウントへのログインでつまづきました。

20200419_020545605_iOS
「時間内にセキュリティキーが見つかりませんでした。もう一度お試しください。」と表示され、そこから先に進めなくなってしまったのです。

これはまずいと試行錯誤し解決したときのメモです。

Read More

icon

宮城県仙台市に本拠地を置く七十七銀行のスマホ向けアプリ『七十七銀行アプリ』を使おうとしたところまったくうまくいかず、窓口で尋ねてわかったことの備忘録です。

スクリーンショットはiPhoneで撮りましたが、実際にはiOS/Androidの両方で試し、同じエラーが出ていますので、おそらく同じ挙動をすると思われます。

Read More

Eclipseのプラグイン、JBoss Toolsに含まれるHibernate Toolsを使いRDBMSのテーブル構造から自動でHibernateのマッピングファイル群を生成(Hibernate Code Generation)しようとしたとき、下図のようにコメントなど日本語部分が文字化けしてしまうことがあります。

image

文字化けに気づかず実行すると下記のようなメッセージで例外が発生することがあります。

Error parsing XML: XML InputStream(5) 1バイトのUTF-8シーケンスのバイト1が無効です。

Read More

Microsoft Access.mdbファイル/.accdbファイルから、テーブル/クエリ/フォーム/レポート/モジュール/マクロの一覧表を作成するプログラムを公開します。

(2020/02/06更新)

2020-02-02 (1) Read More

C#やVB .NETでExcelを使わずにExcelのファイルを読み込むときの定番NPOIを使用せずExcelDataReaderで文字化けなくファイルを読み込むための方法です。

ExcelDataReaderを用いて.xlsファイルを読み込み、文字化けを起こした例

Read More

タミヤの『楽しい工作シリーズ No.227 カムロボット工作セット』と『IchigoJam』の組み合わせで動くサンプルプログラムを作ってみました。

プログラムを実行するとIchigoJamにつながっているキーボードがリモコンになり、キー入力をするとカムロボット(カムロボ)が動きます。

IMG_1215

Read More

KB4497934を適用するとレイアウトが崩れる?」の続きです。

検索キーワードが絞り込めたので、改めてインターネットを検索してみるとQiita@tfukumoriさんの記事が見つかりました。

2019/4/26のWindows 新元号(令和)対応パッチでのフォント変更?での不具合調査(Windows 7, 10 1803, .NET, Excel)』 (https://qiita.com/tfukumori/items/a1fb3984a3488875515e)

@tfukumoriさんの記事を読んでいくと自分が遭遇している現象と同じようです。

自分の場合、KB4497934で現象が起きましたが、俗に「令和対応」と呼ばれるパッチがリリースされたあたりから発生しているようです。

さらに読み進めていくと、この現象を解決するための修正パッチが配布されているようです。

Windows Updateでの修正(5/15追記)

Windows Update 定例パッチ(Bリリース、アメリカ第2火曜日の翌日、日本では5/15)で修正されたようです。

えっ、自分の環境では解決できていない…

ページに書いてあった情報をヒントに試してみたところ、解決ができたので修正方法を以下に記載します。

Read More

KB4497934を適用するとフォントの大きさが変わる?」でアップデートを適用するとフォントの大きさが変わるようだと記事を書きましたが、それ以外にも違いがあるようです。

差異を確認したのはVB .NETのSystem.Windows.Forms.Formクラスを継承したクラスでインスタンス生成時に発生するフォームのResizeイベントです。
具体的には、フォームのコンストラクタから呼び出されるInitializeComponentメソッドの実行中に発生するResizeイベントの発生回数が変わります。

  • 確認した環境

Windows 10 Pro Version 1809 Build 17753.475
Visual Studio Professional 2017 Version 15.9.11
VB .NETを用いたWindows Formsアプリ

  • アップデート適用前にResizeイベントが発生するタイミング

  1. Me.ClientSizeプロパティ設定時
  2. Me.Locationプロパティ設定時
  3. フォーム内のコントロール(コンテナ)に対するEndInitメソッド実行時
  • アップデート適用後にResizeイベントが発生するタイミング

  1. Me.ClientSizeプロパティ設定時
  2. Me.Locationプロパティ設定時
  3. フォーム内のコントロール(コンテナ)に対するEndInitメソッド実行時
  4. Me.ResumeLayoutメソッド実行時

比べてみると、アップデート適用後の4回目のResizeイベントが発生したタイミングでフォームのレイアウトが崩れてしまっています。
調査のために使用したフォームでは145ピクセル相当の横ずれが生じているようです。
全体の幅が1000ピクセル強の中で145ピクセルのずれなので見た目的にはかなりの違和感があります。

4回目のResizeイベント発生自体はInitializeComponentメソッドのMe.ResumeLayoutメソッドを呼び出している部分をコメントアウトすることで抑制できます。
(かなり乱暴な方法ですが、ResumeLayoutの引数を変えるなどでは抑制できませんでした。)
しかし、Resizeイベントの発生を抑制した状態でも生成されたフォームを確認するとフォントの大きさが異なるためか、やはりレイアウトが崩れています。
全体的にフォントの横幅が狭まっているのか前詰め状態になっています。

Windows Updateで改善されるのを待つのが無難かもしれません。

InitializeComponentメソッドの変更ですが、ソースを確認すると以下のように変更をするなとコメントされている部分なので危険性を理解したうえで変更するようにしてください。

‘メモ: 以下のプロシージャは Windows フォーム デザイナで必要です。
‘Windows フォーム デザイナを使って変更できます。
‘コード エディタを使用して、変更しないでください。

※2019/05/30 14:00 「KB4497934を適用するとレイアウトが崩れる? [とりあえず解決]」にこの記事の続きを書きました。

Windows 10のWindows UpdateでKB4497934
(2019年5月21日リリース)を適用するとフォントの大きさが変わってしまうケースがあるようです。

この現象を確認しているのは、MS UIゴシックとMS Pゴシックの2種類です。
(Visual Studio Professional 2017 Version 15.9.11上でVB .NETを用いてWindows Formsアプリを開発しているときに発生)

掲載したサンプルはSystem.Windows.Forms.LabelとSystem.Windows.Forms.TextBoxを用いてフォントにMS UI ゴシックを指定して表示してみました。
このサンプルではわずか数ピクセル程度のずれですが、String.Drawing.GraphicsクラスのMeasureStringメソッドなどを用いて描画サイズを測りながら描画位置を調整するような処理を行うと、かなり大きくずれて表示されます。
守秘義務の都合上公開はできないのですが作業中のプロジェクトではドン引きするくらいに画面が崩れています。

2019-05-29

KB4497934のリリース文でフォントや描画に関する言及はありませんが、KB4494441 (2019年5月14日リリース)のリリース文に以下のような説明があります。

Microsoft Excel で、MS UI Gothic または MS PGothic フォントを使用しているときに、テキスト、レイアウト、またはセルのサイズの幅が予想よりも狭く、または広くなることがある問題を修正します。

また、インターネットの情報を検索すると令和対応のあたりから表示崩れの報告が散見されるようです。KB4497934でもなんらかの影響を受けているのかもしれないですね。

とりあえずKB4497934をアンインストールすると、見た目上は以前の描画に戻るようです。

※2019/05/30 0:40 「KB4497934を適用するとレイアウトが崩れる?」にこの記事の続きを書きました。

  • KB4497934適用前
    KB4497934適用前
  • KB4497934適用後
    KB4497934適用後