こんにちは!

‘——————————————————————————
‘Copyright (C) Imabari Shipbuilding Co. Ltd All rights reserved.
‘——————————————————————————

#Region “更新履歴”
‘**********************************************************************************************************/
‘———————————————————————————————————-
‘ 修正日 / 修正者 / Rev / 修正内容
‘———————————————————————————————————-
‘ 2025/05/21 / SIT柿木 / 23.1.0 / 新規作成(計849)
‘———————————————————————————————————-
‘**********************************************************************************************************/
#End Region

#Region “Imports”
Imports System.Configuration
Imports System.Net
Imports System.IO
Imports System.Text
Imports Microsoft.Office.Interop
Imports System.Globalization
Imports Microsoft.Office.Interop.Excel
Imports System.Net.Mail
Imports System.Net.Mime

#End Region
”’ <summary>
”’ アプリケーションメイン処理(業務処理)クラス
”’ </summary>
”’ <remarks></remarks>
Public Class MainProcess

#Region “コンストラクタ”
”’ <summary>
”’ プライベートコンストラクタ
”’ インスタンス生成防止
”’ </summary>
”’ <remarks></remarks>
Private Sub New()
End Sub
#End Region

#Region “定数”

”’ <summary>
”’ 各工場の暑さ指数予報のCSVデータ取得用URL
”’ </summary>
”’ <remarks></remarks>
Public Const WBGT_CSV_URL_IMABARI As String = “https://www.wbgt.env.go.jp/prev15WG/dl/yohou_73076.csv”
Public Const WBGT_CSV_URL_MARUGAME As String = “https://www.wbgt.env.go.jp/prev15WG/dl/yohou_72111.csv”
Public Const WBGT_CSV_URL_SAIJO As String = “https://www.wbgt.env.go.jp/prev15WG/dl/yohou_73126.csv”
Public Const WBGT_CSV_URL_HIROSHIMA As String = “https://www.wbgt.env.go.jp/prev15WG/dl/yohou_67461.csv”
Public Const WBGT_CSV_URL_AIESU As String = “https://www.wbgt.env.go.jp/prev15WG/dl/yohou_73001.csv”
Public Const WBGT_CSV_URL_KASADO As String = “https://www.wbgt.env.go.jp/prev15WG/dl/yohou_81386.csv”
Public Const WBGT_CSV_URL_MINAMIJP As String = “https://www.wbgt.env.go.jp/prev15WG/dl/yohou_83216.csv”
Public Const WBGT_CSV_URL_STEELHUB As String = “https://www.wbgt.env.go.jp/prev15WG/dl/yohou_66446.csv”

”’ <summary>
”’ WBGT予報CSVデータのファイル名定数
”’ </summary>
”’ <remarks></remarks>
Public Const FILE_NAME_IMABARI As String = “WBGT_Imabari_73076.csv”
Public Const FILE_NAME_MARUGAME As String = “WBGT_Marugame_72111.csv”
Public Const FILE_NAME_SAIJO As String = “WBGT_Saijo_73126.csv”
Public Const FILE_NAME_HIROSHIMA As String = “WBGT_Hiroshima_67461.csv”
Public Const FILE_NAME_AIESU As String = “WBGT_Aiesu_73001.csv”
Public Const FILE_NAME_KASADO As String = “WBGT_Kasado_81386.csv”
Public Const FILE_NAME_MINAMIJP As String = “WBGT_MinamiJp_83216.csv”
Public Const FILE_NAME_STEELHUB As String = “WBGT_SteelHub_66446.csv”

‘og4net出力
Private Shared ReadOnly log As log4net.ILog = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType)

#End Region

#Region “パブリックメソッド”
”’ <summary>
”’ アプリケーションメイン処理(エントリーポイントではない)
”’ エントリーポイント(Module1.Main())から未補足例外、ログ、ミューテックス設定後に呼ばれる。
”’ </summary>
”’ <remarks></remarks>
Public Shared Sub Run()
‘朝7時と夕方18時で処理を切り替えるため、Windowsタスクスケジューラから引数を取得
Dim strArgs() As String = System.Environment.GetCommandLineArgs()
Dim intTargetDate As Integer = 0 ‘ デフォルト
Dim strTargetDate1Flag As String = “”

If strArgs.Length > 1 Then
If Integer.TryParse(strArgs(1), intTargetDate) = False Then
‘引数が無効
intTargetDate = 0
End If
End If

‘出力先Tempフォルダ作成・初期化
Dim strTempDir As String = Path.Combine(Directory.GetCurrentDirectory(), “Temp”)
If Directory.Exists(strTempDir) Then
For Each filePath As String In Directory.GetFiles(strTempDir)
Try
File.Delete(filePath)
Catch ex As Exception
Console.WriteLine(“ファイル削除失敗: ” & filePath & ” – ” & ex.Message)
End Try
Next
Else
Directory.CreateDirectory(strTempDir)
End If

Dim strPath As String = Path.Combine(Directory.GetCurrentDirectory() & “\XlsFormat\”, “熱中症予防運動指針表.jpg”)
Dim fileName As String = Path.GetFileName(strPath)
Dim destPath As String = Path.Combine(strTempDir, fileName)
File.Copy(strPath, destPath, True)

‘URLとファイル名の組を定義(順次処理用)
Dim objDicDownloadList As New Dictionary(Of String, String) From
{
{WBGT_CSV_URL_IMABARI, FILE_NAME_IMABARI},
{WBGT_CSV_URL_MARUGAME, FILE_NAME_MARUGAME},
{WBGT_CSV_URL_SAIJO, FILE_NAME_SAIJO},
{WBGT_CSV_URL_HIROSHIMA, FILE_NAME_HIROSHIMA},
{WBGT_CSV_URL_AIESU, FILE_NAME_AIESU},
{WBGT_CSV_URL_KASADO, FILE_NAME_KASADO},
{WBGT_CSV_URL_MINAMIJP, FILE_NAME_MINAMIJP},
{WBGT_CSV_URL_STEELHUB, FILE_NAME_STEELHUB}
}

‘セキュリティプロトコルの設定(TLS 1.2)
ServicePointManager.SecurityProtocol = CType(3072, SecurityProtocolType)

‘WebClient(プロキシ対応)
DI.Utilities.Logging.Logger.WriteDebug(“環境省サイトよりCSVデータの順次ダウンロード処理を開始”)
Dim objWarningMsg As New List(Of String)
Dim objClient As New WebClient()
objClient.Proxy = WebRequest.DefaultWebProxy
objClient.Proxy.Credentials = CredentialCache.DefaultCredentials
Try
‘環境省のサイトからCSVを順次ダウンロード
For Each kvp In objDicDownloadList
Dim url As String = kvp.Key
Dim strFileName As String = kvp.Value
Dim strFullPath As String = Path.Combine(strTempDir, strFileName)

Try
objClient.DownloadFile(url, strFullPath)
DI.Utilities.Logging.Logger.WriteDebug(“ファイルを保存しました: ” & strFullPath)
Catch ex As Exception
objWarningMsg.Add(GetKyotenNameFromFileName(strFileName) & “のファイルのダウンロードに失敗しました。”)
DI.Utilities.Logging.Logger.WriteError(“ダウンロード失敗:” & url)
End Try
Next

‘熱中症特別警戒情報及び熱中症警戒情報のデータ取得
Dim urlHt As String = “https://www.wbgt.env.go.jp/alert/dl/2025/alert_20250617_05.csv”
Dim strFileNameHt As String = “strNkjY17.csv”
Dim strXlsxNameHt As String = “strNkjY17.xlsx”

Dim strCsvPath As String = Path.Combine(strTempDir, strFileNameHt)
Dim strXlsxPath As String = Path.Combine(strTempDir, strXlsxNameHt)

‘CSVをダウンロードしてShift_JISで保存
Using client As New WebClient()
Dim utf8Text As String = Encoding.UTF8.GetString(client.DownloadData(urlHt))
File.WriteAllText(strCsvPath, utf8Text, Encoding.GetEncoding(932))
End Using

‘CSV → xlsx に変換
Dim xlApp As New Application
xlApp.DisplayAlerts = False
xlApp.Visible = False

Try
Dim xlWorkbook As Workbook = xlApp.Workbooks.Open(strCsvPath, Format:=6, Delimiter:=”,”)
xlWorkbook.SaveAs(strXlsxPath, XlFileFormat.xlOpenXMLWorkbook)
xlWorkbook.Close()
Finally
xlApp.Quit()
System.Runtime.InteropServices.Marshal.ReleaseComObject(xlApp)
End Try

‘熱中症アラート区分取得
DI.Utilities.Logging.Logger.WriteDebug(“環境省サイトより熱中症アラート区分取得処理を開始”)
Dim lstkenList As New List(Of String) From {“香川県”, “愛媛県”, “広島県”, “山口県”, “大分県”, “岡山県”}

Dim kenDict As New Dictionary(Of String, String)()

Using objWrapper As New Design_com.ExcelWrapper(strTempDir & “\” & strXlsxNameHt)

objWrapper.ChangeSheet(1)

Dim intLastRow As Integer = objWrapper.GETInputMaxRow(“A”)

For i As Integer = 1 To intLastRow
Dim objValA As Object = objWrapper.GetValue(“A” & i)
If objValA IsNot Nothing Then
Dim kenName As String = objValA.ToString().Trim()
If lstkenList.Contains(kenName) AndAlso Not kenDict.ContainsKey(kenName) Then
Dim objValG As Object = objWrapper.GetValue(“G” & i)
If objValG IsNot Nothing Then
kenDict(kenName) = objValG.ToString().Trim()
End If
End If
End If
Next

End Using

For Each kvp In kenDict
Console.WriteLine($”{kvp.Key} = {kvp.Value}”)
Next

strTargetDate1Flag = String.Join(“,”, lstkenList.
Select(Function(k) k.Trim()).
Where(Function(k) kenDict.ContainsKey(k)).
Select(Function(k) $”{k}:{kenDict(k)}”).
ToArray())
DI.Utilities.Logging.Logger.WriteDebug(“環境省サイトより熱中症アラート区分取得処理を終了”)
Catch ex As Exception
Finally
objClient.Dispose()
End Try
DI.Utilities.Logging.Logger.WriteDebug(“環境省サイトよりCSVデータの順次ダウンロード処理を終了”)

‘熱中症アラートデータ登録
DI.Utilities.Logging.Logger.WriteDebug(“熱中症アラートデータ登録処理を開始”)
Dim strCsvData = String.Empty
Dim objEnv As New Environment()
Dim objAccessDB As New DBAccess(objEnv)
Dim objDbRtn As DBAccess.ReturnValue
Dim objIPAddress As System.Net.IPAddress() = System.Net.Dns.GetHostAddresses(System.Net.Dns.GetHostName())
Dim strIPAddress As String = objIPAddress.Cast(Of System.Net.IPAddress)().
Where(Function(addr) addr.AddressFamily = System.Net.Sockets.AddressFamily.InterNetwork).
First().ToString()

Dim objFileList As String() =
{
Path.Combine(strTempDir, FILE_NAME_IMABARI),
Path.Combine(strTempDir, FILE_NAME_MARUGAME),
Path.Combine(strTempDir, FILE_NAME_SAIJO),
Path.Combine(strTempDir, FILE_NAME_HIROSHIMA),
Path.Combine(strTempDir, FILE_NAME_AIESU),
Path.Combine(strTempDir, FILE_NAME_KASADO),
Path.Combine(strTempDir, FILE_NAME_MINAMIJP),
Path.Combine(strTempDir, FILE_NAME_STEELHUB)
}
For Each strCsvFilePath As String In objFileList
Try

If File.Exists(strCsvFilePath) Then
‘CSVファイル読み込み
strCsvData = File.ReadAllText(strCsvFilePath, Encoding.UTF8).TrimEnd(vbLf.ToCharArray())

‘暑さ指数(WBGT)の予測値CSVをテーブル登録(ImazoP601テーブル更新))
objDbRtn = objAccessDB.InsWBGT_Data(strCsvData, strTargetDate1Flag, strIPAddress)
If Not objDbRtn.IsSuccess Then
objWarningMsg.Add(GetKyotenNameFromFileName(Path.GetFileName(strCsvFilePath)) &
“の暑さ指数(WBGT)の予測値CSVのテーブル登録に失敗しました。”)
End If
Else
DI.Utilities.Logging.Logger.WriteDebug(“ファイルが見つかりません: ” & strCsvFilePath)
objWarningMsg.Add(GetKyotenNameFromFileName(Path.GetFileName(strCsvFilePath)) &
“のファイルのダウンロードに失敗したため、前日のデータで処理されました。”)
End If

Catch ex As Exception
DI.Utilities.Logging.Logger.WriteError(“登録エラー:” & strCsvFilePath & vbCrLf & ex.Message)
End Try
Next
DI.Utilities.Logging.Logger.WriteDebug(“熱中症アラートデータ登録処理を終了”)

‘熱中症アラートデータ取得
DI.Utilities.Logging.Logger.WriteDebug(“熱中症アラートデータ取得処理を開始”)
Dim objData As dsDB.get_715_Batch_WBGT_Data1DataTable = objAccessDB.GetWBGT_Data(Date.Today)
DI.Utilities.Logging.Logger.WriteDebug(“熱中症アラートデータ取得処理を終了”)

Dim strSaveName As String = String.Empty
Dim strEmailAddress As String = String.Empty
Dim listErrMessage As New List(Of String)
Dim dtmTargetDate As Date = If(intTargetDate = 0, Today, Today.AddDays(1))
Dim intMaxTemp As Integer = 0
Dim strMaxHeatIndexTime As String = String.Empty
Dim activeSheet As String = “”
Dim strSaveNameJpg1 As String = String.Empty
Dim strSaveNameJpg2 As String = String.Empty
Dim strKyoten As String = String.Empty

‘拠点コードでループ
Dim lstTempFolderPath As New List(Of String)()
Dim lstSaveName As New List(Of String)()
Dim intLevel = 0
Dim strKyotenNames As String() = {“今治”, “丸亀”, “西条”, “広島”, “多度津”, “あいえす”, “しまなみ”, “岩城”, “新笠戸”, “南日本”, “スチールハブ”, “メタルファブリカ”}
Dim objErrorMseg As New List(Of String)

For Each kyotenAll As String In strKyotenNames

‘最初の暑さ(厳重警戒)指数の時間
Dim strFirstHighAlertIndexTime As String = String.Empty

‘最初の暑さ(危険)指数の時間
Dim strFirstDangerIndexTime = String.Empty

DI.Utilities.Logging.Logger.WriteDebug(kyotenAll & “工場へのExcel出力処理を開始”)

Select Case kyotenAll
Case “多度津”, “メタルファブリカ”
strKyoten = “丸亀”
Case “しまなみ”, “岩城”
strKyoten = “あいえす”
Case Else
strKyoten = kyotenAll
End Select

Try
‘=== Excel出力開始 ===
DI.Utilities.Logging.Logger.WriteDebug(“Excel出力処理を開始”)
Using objWrapper As New Design_com.ExcelWrapper(Directory.GetCurrentDirectory() & “\XlsFormat\” & “熱中症アラート.xlsx”)

Dim objMaxRow = (From t In objData
Where t.dDate.Date = dtmTargetDate.Date AndAlso t.cKyoten = strKyoten
Select t).FirstOrDefault()

If Not objMaxRow Is Nothing Then

Dim objDicTimeTemperature As New Dictionary(Of String, String)
objDicTimeTemperature.Add(“03”, If(objMaxRow.IsiTemperature_3Null, 0, objMaxRow.iTemperature_3))
objDicTimeTemperature.Add(“06”, If(objMaxRow.IsiTemperature_6Null, 0, objMaxRow.iTemperature_6))
objDicTimeTemperature.Add(“09”, If(objMaxRow.IsiTemperature_9Null, 0, objMaxRow.iTemperature_9))
objDicTimeTemperature.Add(“12”, If(objMaxRow.IsiTemperature_12Null, 0, objMaxRow.iTemperature_12))
objDicTimeTemperature.Add(“15”, If(objMaxRow.IsiTemperature_15Null, 0, objMaxRow.iTemperature_15))
objDicTimeTemperature.Add(“18”, If(objMaxRow.IsiTemperature_18Null, 0, objMaxRow.iTemperature_18))
objDicTimeTemperature.Add(“21”, If(objMaxRow.IsiTemperature_21Null, 0, objMaxRow.iTemperature_21))
objDicTimeTemperature.Add(“24”, If(objMaxRow.IsiTemperature_24Null, 0, objMaxRow.iTemperature_24))

‘気温でを降順に並べ替え、先頭データを取得=1日の最大気温の時間帯と気温を取得
Dim onjMaxTimeTemperature = objDicTimeTemperature.OrderByDescending(Function(x) x.Value).ThenBy(Function(x) x.Key).First()

intMaxTemp = onjMaxTimeTemperature.Value ‘1日の最大気温
strMaxHeatIndexTime = onjMaxTimeTemperature.Key ‘1日の最大気温の最小の時間帯

‘気温が28度以上31未満(厳重警戒)の最小時間帯データの取得
Dim objTimeTemperature_HighAlert = objDicTimeTemperature.Where(Function(x) x.Value >= 28 AndAlso x.Value < 31).OrderBy(Function(x) x.Key).FirstOrDefault()
If Not (objTimeTemperature_HighAlert.Key Is Nothing AndAlso objTimeTemperature_HighAlert.Value Is Nothing) Then
‘厳重警戒データが存在する場合に値をセット
strFirstHighAlertIndexTime = objTimeTemperature_HighAlert.Key
End If

‘気温が31度以上(危険)の最小時間帯データの取得
Dim objTimeTemperature_Danger = objDicTimeTemperature.Where(Function(x) x.Value >= 31).OrderBy(Function(x) x.Key).FirstOrDefault()
If Not (objTimeTemperature_Danger.Key Is Nothing AndAlso objTimeTemperature_Danger.Value Is Nothing) Then
‘危険データが存在する場合に値をセット
strFirstDangerIndexTime = objTimeTemperature_Danger.Key
End If

‘シート切り替え用 maxTemp を取得(本日または明日)
Dim allSheetNames As String() = {“ほぼ安全”, “注意”, “警戒”, “厳重警戒”, “危険”}

Select Case intMaxTemp
Case < 21
activeSheet = “ほぼ安全”
objWrapper.ChangeSheet(activeSheet)
intLevel = 1
Case 21 To 24
activeSheet = “注意”
objWrapper.ChangeSheet(activeSheet)
intLevel = 2
Case 25 To 27
activeSheet = “警戒”
objWrapper.ChangeSheet(activeSheet)
intLevel = 3
Case 28 To 30
activeSheet = “厳重警戒”
objWrapper.ChangeSheet(activeSheet)
intLevel = 4
Case 31 To 32
activeSheet = “危険”
objWrapper.ChangeSheet(activeSheet)
intLevel = 5
Case 33 To 34
intLevel = 6
activeSheet = “危険”
objWrapper.ChangeSheet(activeSheet)
Case Else
intLevel = 7
activeSheet = “危険”
objWrapper.ChangeSheet(activeSheet)
End Select

objWrapper.PutValue(“B2”, kyotenAll & “工場”)

If strKyoten = “今治” Then
objWrapper.PutValue(“C7”, “=HyperLink(” & “””” & “https://weather.yahoo.co.jp/weather/jp/38/7320/38202.html” & “””” & “)”)
ElseIf strKyoten = “丸亀” Then
objWrapper.PutValue(“C7”, “=HyperLink(” & “””” & “https://weather.yahoo.co.jp/weather/jp/37/7200/37202.html” & “””” & “)”)
ElseIf strKyoten = “広島” Then
objWrapper.PutValue(“C7”, “=HyperLink(” & “””” & “https://weather.yahoo.co.jp/weather/jp/34/6710/34204.html” & “””” & “)”)
ElseIf strKyoten = “西条” Then
objWrapper.PutValue(“C7”, “=HyperLink(” & “””” & “https://weather.yahoo.co.jp/weather/jp/38/7320/38206.html” & “””” & “)”)
ElseIf strKyoten = “あいえす” Then
objWrapper.PutValue(“C7”, “=HyperLink(” & “””” & “https://weather.yahoo.co.jp/weather/jp/38/7320/38202.html” & “””” & “)”)
ElseIf strKyoten = “新笠戸” Then
objWrapper.PutValue(“C7”, “=HyperLink(” & “””” & “https://weather.yahoo.co.jp/weather/jp/35/8120/35207.html” & “””” & “)”)
ElseIf strKyoten = “南日本” Then
objWrapper.PutValue(“C7”, “=HyperLink(” & “””” & “https://weather.yahoo.co.jp/weather/jp/44/8310/44201.html” & “””” & “)”)
ElseIf strKyoten = “スチールハブ” Then
objWrapper.PutValue(“C7”, “=HyperLink(” & “””” & “https://weather.yahoo.co.jp/weather/jp/38/7320/38206.html” & “””” & “)”)
End If

If intTargetDate = 0 Then
objWrapper.PutValue(“C18”, “本日の熱中症予報”)
objWrapper.PutValue(“P2”, “本日の熱中症予報”)
Else
objWrapper.PutValue(“C18”, “明日の熱中症予報”)
objWrapper.PutValue(“P2”, “明日の熱中症予報”)
End If

‘ アクティブ以外のシートを削除
For Each sheetName In allSheetNames
If sheetName <> activeSheet Then
objWrapper.DeleteSheetByName(sheetName)
End If
Next

‘Excel に出力
For intCnt As Integer = 0 To 2

Dim dtmTargetDtm As Date = Today.AddDays(intCnt)
Dim intRowNum As Integer = 12 + intCnt ’12⇒Excel一覧の貼り付け行の位置

‘今日/明日/明後日
Dim strLabel As String = If(intCnt = 0, “今日”, If(intCnt = 1, “明日”, “明後日”))
Dim strLabelText As String = $”{strLabel}({dtmTargetDtm:MM月dd日})”
objWrapper.PutValue($”C{intRowNum}”, strLabelText)

objMaxRow = (From t In objData
Where t.dDate.Date = dtmTargetDtm.Date AndAlso t.cKyoten = strKyoten
Select t).FirstOrDefault()

If objMaxRow IsNot Nothing Then
‘各温度データを固定列に出力
objWrapper.PutValue($”I{intRowNum}”, If(objMaxRow.IsiTemperature_3Null, Nothing, objMaxRow.iTemperature_3.ToString()))
objWrapper.PutValue($”K{intRowNum}”, If(objMaxRow.IsiTemperature_6Null, Nothing, objMaxRow.iTemperature_6.ToString()))
objWrapper.PutValue($”M{intRowNum}”, If(objMaxRow.IsiTemperature_9Null, Nothing, objMaxRow.iTemperature_9.ToString()))
objWrapper.PutValue($”O{intRowNum}”, If(objMaxRow.IsiTemperature_12Null, Nothing, objMaxRow.iTemperature_12.ToString()))
objWrapper.PutValue($”Q{intRowNum}”, If(objMaxRow.IsiTemperature_15Null, Nothing, objMaxRow.iTemperature_15.ToString()))
objWrapper.PutValue($”S{intRowNum}”, If(objMaxRow.IsiTemperature_18Null, Nothing, objMaxRow.iTemperature_18.ToString()))
objWrapper.PutValue($”U{intRowNum}”, If(objMaxRow.IsiTemperature_21Null, Nothing, objMaxRow.iTemperature_21.ToString()))
objWrapper.PutValue($”W{intRowNum}”, If(objMaxRow.IsiTemperature_24Null, Nothing, objMaxRow.iTemperature_24.ToString()))
End If

Next
strSaveName = String.Format(“熱中症アラート{0}_{1:yyyyMMddHHmmssfff}.xlsx”, kyotenAll, DateTime.Now)
objWrapper.SaveAs(System.IO.Path.Combine(strTempDir, strSaveName), Excel.XlFileFormat.xlWorkbookDefault)
Else
Dim strMessage As String = “暑さ指数(WBGT)の予測データが存在しないため、” & kyotenAll & “工場へのメール送信処理に失敗しました。”
objErrorMseg.Add(strMessage)
DI.Utilities.Logging.Logger.WriteError(strMessage)
Continue For
End If
DI.Utilities.Logging.Logger.WriteDebug(“Excel出力処理を終了”)

Try

DI.Utilities.Logging.Logger.WriteDebug(“JPEG画像出力処理を開始”)
‘JPEG画像保存
Dim objWs As Excel.Worksheet = objWrapper.GetSheet(“Picture1”)
objWs.Visible = Excel.XlSheetVisibility.xlSheetVisible
Dim strActiveSheetName As String = objWrapper.GetActiveSheetName()
objWs = objWrapper.GetSheet(strActiveSheetName)
objWrapper.App.Workbooks(1).Windows(1).View = Excel.XlWindowView.xlNormalView
Dim objRng As Excel.Range = objWs.Range(“A2:Y3”)
objRng.CopyPicture(Excel.XlPictureAppearance.xlScreen, Excel.XlCopyPictureFormat.xlBitmap)
objWrapper.ChangeSheet(“Picture1”)
WaitEvent(500)
objWrapper.PasteToCell(“A1”)
objWrapper.ChangeSheet(activeSheet)
objRng = objWs.Range(“A9:Y28”)
objRng.CopyPicture(Excel.XlPictureAppearance.xlScreen, Excel.XlCopyPictureFormat.xlBitmap)
objWrapper.ChangeSheet(“Picture1”)
WaitEvent(500)
objWrapper.PasteToCell(“A4”)
DI.Utilities.Logging.Logger.WriteDebug(“JPEG画像出力処理1”)
objWrapper.SelectRange(“A1”)

objWrapper.ChangeSheet(“Picture1”)
objWrapper.PutValue(6, 3, 7, 3, “”)
strSaveNameJpg1 = String.Format(“熱中症アラート{0}_{1:yyyyMMddHHmmssfff}_1.Jpg”, kyotenAll, DateTime.Now)
Dim strFullPathJpg As String = System.IO.Path.Combine(strTempDir, strSaveNameJpg1)
strActiveSheetName = objWrapper.GetActiveSheetName()
objWs = objWrapper.GetSheet(strActiveSheetName)
objWrapper.App.Workbooks(1).Windows(1).View = Excel.XlWindowView.xlNormalView
objRng = objWs.Range(“A1:Z28”)
objRng.CopyPicture(Excel.XlPictureAppearance.xlScreen, Excel.XlCopyPictureFormat.xlBitmap)
Dim objChartObj As Excel.ChartObject = objWs.ChartObjects().Add(Left:=0, Top:=0, Width:=objRng.Width, Height:=objRng.Height)
Dim objChart As Excel.Chart = objChartObj.Chart
WaitEvent(300)
objChart.Paste()
objChart.Export(strFullPathJpg, “JPG”)
objChartObj.Delete()

Catch ex As Exception
‘エラーメッセージを追加
Dim strMessage As String = “JPEG画像の作成に失敗したため、” & kyotenAll & “工場へのメール送信処理をスキップしました。”
objErrorMseg.Add(strMessage)
DI.Utilities.Logging.Logger.WriteError(strMessage)
DI.Utilities.Logging.Logger.WriteException(ex)
Continue For
End Try
DI.Utilities.Logging.Logger.WriteDebug(“JPEG画像出力処理を終了”)

End Using

DI.Utilities.Logging.Logger.WriteDebug(kyotenAll & “工場へのExcel出力処理を終了”)

Catch ex As Exception
‘エラーメッセージを追加
Dim strMessage As String = “Excelの作成に失敗したため、” & kyotenAll & “工場へのメール送信処理をスキップしました。”
objErrorMseg.Add(strMessage)
DI.Utilities.Logging.Logger.WriteError(strMessage)
DI.Utilities.Logging.Logger.WriteException(ex)
Continue For
End Try

Try
DI.Utilities.Logging.Logger.WriteDebug(kyotenAll & “工場へのメール送信処理を開始”)

lstTempFolderPath.Add(strTempDir)
lstSaveName.Add(strSaveName)

Dim strTargetDateJpn As String = String.Empty

If intTargetDate = 0 Then
strTargetDateJpn = “本日”
Else
strTargetDateJpn = “明日”
End If

If strFirstHighAlertIndexTime = “” Then
strFirstHighAlertIndexTime = “–”
ElseIf strFirstDangerIndexTime = “” Then
strFirstDangerIndexTime = “–”
End If

strSaveNameJpg2 = “熱中症予防運動指針表.jpg”
‘メール送信処理
SendInfoMail(intLevel,
dtmTargetDate,
strTargetDateJpn,
kyotenAll,
strKyoten,
intMaxTemp,
strMaxHeatIndexTime,
strFirstHighAlertIndexTime,
strFirstDangerIndexTime,
strTempDir,
strSaveName,
strSaveNameJpg1,
strSaveNameJpg2)

DI.Utilities.Logging.Logger.WriteDebug(kyotenAll & “工場へのメール送信処理を終了”)

Catch ex As Exception
‘エラーメッセージを追加
Dim strMessage As String = “「熱中症アラート」メールの送信に失敗したため、” & kyotenAll & “工場へのメールを送信できませんでした。”
objErrorMseg.Add(strMessage)
DI.Utilities.Logging.Logger.WriteError(strMessage)
DI.Utilities.Logging.Logger.WriteException(ex)
Continue For
End Try

Next

‘アプリケーション終了処理
If objErrorMseg.Any() Then
ExitApplication(Define.AppExitCode.Err, “”, objErrorMseg)
ElseIf objWarningMsg.Any() Then
ExitApplication(Define.AppExitCode.Warning, “”, objWarningMsg)
Else
ExitApplication(Define.AppExitCode.Success,
ConfigurationManager.AppSettings(My.Settings.Key_StatusSuccessMessage))
End If

End Sub

”’ <summary>
”’ ファイル名から拠点名を取得する
”’ </summary>
”’ <param name=”P_FileName”>CSVファイル名</param>
”’ <returns>拠点名”</returns>
Private Shared Function GetKyotenNameFromFileName(ByVal P_FileName As String) As String
Dim kyotenMap As New Dictionary(Of String, String) From {
{“Imabari”, “今治工場”},
{“Marugame”, “丸亀工場”},
{“Saijo”, “西条工場”},
{“Hiroshima”, “広島工場”}
}

Dim nameParts As String() = Path.GetFileNameWithoutExtension(P_FileName).Split(“_”c)
If nameParts.Length >= 3 Then
Dim key As String = nameParts(1)
If kyotenMap.ContainsKey(key) Then
Return kyotenMap(key)
End If
End If

Return “不明な拠点”
End Function

”’ <summary>
”’
”’ </summary>
”’ <param name=”p_intLevel”>アラートレベル(1:ほぼ安全、2:注意、3:警戒、4:厳重警戒、5:危険、6:危険+熱中症警戒アラート、7:危険+熱中症特別警戒アラート)</param>
”’ <param name=”p_dtmTargetDate”>ターゲット日(朝か夕で異なる)</param>
”’ <param name=”p_strTargetDateJpn”>ターゲット日ステータス(“本日” or “明日”)</param>
”’ <param name=”p_strKyoten”>拠点名(工場名)</param>
”’ <param name=”p_strMaxHeatIndex”>最大暑さ指数</param>
”’ <param name=”p_strMaxHeatIndexTime”>最大暑さ指数の時間</param>
”’ <param name=”strFirstHighAlertIndexTiem”>最初の暑さ(厳重警戒)指数の時間</param>
”’ <param name=”strFirstDangerIndexTiem”>最初の暑さ(危険)指数の時間</param>
”’ <param name=”p_strTempDirPath”>添付ファイルのパス</param>
”’ <param name=”p_strTempFileName”>添付ファイル名</param>
Private Shared Sub SendInfoMail(ByVal p_intLevel As Integer, ByVal p_dtmTargetDate As Date, ByVal p_strTargetDateJpn As String,
ByVal p_strKyotenall As String, ByVal p_strKyoten As String, ByVal p_strMaxHeatIndex As String, ByVal p_strMaxHeatIndexTime As String,
ByVal strFirstHighAlertIndexTiem As String, ByVal strFirstDangerIndexTiem As String,
ByVal p_strTempDirPath As String, ByVal p_strTempFileName As String,
ByVal p_strSaveNameJpg1 As String, ByVal p_strSaveNameJpg2 As String)

Const ALERT_LEVEL_1 As String = “熱中症予報 の 件 {0}/{1}(危険度:ほぼ安全)”
Const ALERT_LEVEL_2 As String = “熱中症予報 の 件 {0}/{1}(危険度:注意)”
Const ALERT_LEVEL_3 As String = “熱中症予報 の 件 {0}/{1}(危険度:警戒)”
Const ALERT_LEVEL_4 As String = “熱中症予報 の 件 {0}/{1}(危険度:厳重警戒)”
Const ALERT_LEVEL_5 As String = “熱中症予報 の 件 {0}/{1}(危険度:危険)”

Const ALERT_LEVEL_JPN As String = “{0}の熱中症の危険度は、{1}です。”

Const ALERT_MSG_TEMP_1 As String = “{0}時から厳重警戒となりますので、下記の事項について、”
Const ALERT_MSG_TEMP_2 As String = “{0}時から厳重警戒、{1}時より危険となりますので、下記の事項について、”

Const ALERT_MSG_TEMP_3 As String = “さらに本日は『<span style =’color:red; font-weight:bold; text-decoration:underline;’>{0}</span>』発表されています。”

‘■■■本文編集用(共通部)■■■
‘日付の編集
Dim jpCalendar As New JapaneseCalendar()
Dim strYear As Integer = jpCalendar.GetYear(p_dtmTargetDate)
Dim strMonth As Integer = p_dtmTargetDate.Month
Dim strDay As Integer = p_dtmTargetDate.Day
Dim strDate As String = String.Format(“年 月 日 : 令和{0}年 {1}月 {2}日”, strYear, strMonth, strDay)

‘工場名の編集
Dim strKojo As String = String.Format(“発信部課 : {0}工場 安全管理チーム”, p_strKyotenall)

‘件名と危険度など、レベルにより編集内容が異なるものの編集
Dim strSubject As String = “”
Dim strKikenStatus As String = “”
Dim strMsgTemp1 As String = “”
Dim strMsgTemp2 As String = “”
Dim strMsgTemp3 As String = “”

Select Case p_intLevel
Case 1
strSubject = String.Format(ALERT_LEVEL_1, strMonth.ToString(“00”), strDay.ToString(“00”))
strKikenStatus = String.Format(ALERT_LEVEL_JPN, p_strTargetDateJpn, “ほぼ安全”)
Case 2
strSubject = String.Format(ALERT_LEVEL_2, strMonth.ToString(“00”), strDay.ToString(“00”))
strKikenStatus = String.Format(ALERT_LEVEL_JPN, p_strTargetDateJpn, “注意”)
Case 3
strSubject = String.Format(ALERT_LEVEL_3, strMonth.ToString(“00”), strDay.ToString(“00”))
strKikenStatus = String.Format(ALERT_LEVEL_JPN, p_strTargetDateJpn, “警戒”)
Case 4
strSubject = String.Format(ALERT_LEVEL_4, strMonth.ToString(“00”), strDay.ToString(“00”))
strKikenStatus = String.Format(ALERT_LEVEL_JPN, p_strTargetDateJpn, “厳重警戒”)
strMsgTemp1 = String.Format(ALERT_MSG_TEMP_1, strFirstHighAlertIndexTiem)
Case 5, 6, 7
strSubject = String.Format(ALERT_LEVEL_5, strMonth.ToString(“00”), strDay.ToString(“00”))
strKikenStatus = String.Format(ALERT_LEVEL_JPN, p_strTargetDateJpn, “危険”)
If strFirstHighAlertIndexTiem = “–” And strFirstDangerIndexTiem = “–” Then
strMsgTemp2 = “”
ElseIf strFirstHighAlertIndexTiem = “–” Then
strMsgTemp2 = String.Format(“{0}時より危険となりますので、下記の事項について、”, strFirstDangerIndexTiem)
ElseIf strFirstDangerIndexTiem = “–” Then
strMsgTemp2 = String.Format(“{0}時から厳重警戒となりますので、下記の事項について、”, strFirstHighAlertIndexTiem)
Else
strMsgTemp2 = String.Format(ALERT_MSG_TEMP_2, strFirstHighAlertIndexTiem, strFirstDangerIndexTiem)
End If
If p_intLevel = 6 Then
strSubject += “【熱中症警戒アラート】”
strMsgTemp3 = String.Format(ALERT_MSG_TEMP_3, “熱中症警戒アラート”)
End If
If p_intLevel = 7 Then
strSubject += “【熱中症特別警戒アラート】”
strMsgTemp3 = String.Format(ALERT_MSG_TEMP_3, “熱中症特別警戒アラート”)
End If
End Select

‘最大暑さ指数と時間の編集
Dim strMaxHertInfo As String = “”
strMaxHertInfo = String.Format(“(最大暑さ指数 {0}/{1}時)”, p_strMaxHeatIndex, p_strMaxHeatIndexTime)

‘■■■本文作成(レベル別)■■■
Dim sbBodyMsg As New StringBuilder
Dim contentId1 As String = “img001”
Dim contentId2 As String = “img002”

‘共通部
sbBodyMsg.Append(“<HTML><BODY>”)
sbBodyMsg.Append(strDate)
sbBodyMsg.Append(“<br>”)
sbBodyMsg.Append(“宛 先 : 関 係 者 各 位”)
sbBodyMsg.Append(“<br>”)
sbBodyMsg.Append(strKojo)
sbBodyMsg.Append(“<br>”)
sbBodyMsg.Append(“件 名 : ” & strSubject)
sbBodyMsg.Append(“<br>”)
sbBodyMsg.Append(“………………………………………………………………………………………………”)
sbBodyMsg.Append(“<br>”)
sbBodyMsg.Append($”<img src=’cid:{contentId1}’ />”)
sbBodyMsg.Append(“<br>”)

Select Case p_intLevel
Case 1, 2, 3 ‘「ほぼ安全」, 「注意」, 「警戒」 のパターン

sbBodyMsg.Append(“<br>”)
sbBodyMsg.Append(“ご安全に!”)
sbBodyMsg.Append(“<br>”)
sbBodyMsg.Append(strKikenStatus)
sbBodyMsg.Append(strMaxHertInfo)
sbBodyMsg.Append(“<br>”)
sbBodyMsg.Append(“<br>”)

‘「警戒」の場合
If strKikenStatus.Contains(“警戒”) Then
sbBodyMsg.Append(“適度の休憩を取り、発汗時は水分・塩分補給をこまめに行いましょう。”)
sbBodyMsg.Append(“<br>”)
sbBodyMsg.Append(“狭隘箇所、タンク内工事にはファン等を事前段取りして作業開始しましょう。”)
sbBodyMsg.Append(“<br>”)
sbBodyMsg.Append(“体調に異常を感じたら無理をせず、十分な休息を取るようにしましょう。”)
sbBodyMsg.Append(“<br>”)
sbBodyMsg.Append(“<br>”)
End If

sbBodyMsg.Append(“なお、熱中症のおそれがある労働者を発見した場合は、責任者に連絡し、”)
sbBodyMsg.Append(“<br>”)
sbBodyMsg.Append(“作業離脱、身体冷却、医療機関への搬送等熱中症による重篤化を防止”)
sbBodyMsg.Append(“<br>”)
sbBodyMsg.Append(“するための必要な措置を実施して下さい。”)
sbBodyMsg.Append(“<br>”)

Case 4 ‘厳重警戒
sbBodyMsg.Append(“<br>”)
sbBodyMsg.Append(“ご安全に!”)
sbBodyMsg.Append(“<br>”)
sbBodyMsg.Append(strKikenStatus)
sbBodyMsg.Append(strMaxHertInfo)
sbBodyMsg.Append(“<br>”)
sbBodyMsg.Append(strMsgTemp1)
sbBodyMsg.Append(“<br>”)
sbBodyMsg.Append(“ご留意願います。”)
sbBodyMsg.Append(“<br>”)
sbBodyMsg.Append(“<br>”)

sbBodyMsg.Append(“適度の休憩を取り、発汗時は水分・塩分補給をこまめに行いましょう。”)
sbBodyMsg.Append(“<br>”)
sbBodyMsg.Append(“狭隘箇所、タンク内工事にはファン等を事前段取りして作業開始しましょう。”)
sbBodyMsg.Append(“<br>”)
sbBodyMsg.Append(“体調に異常を感じたら無理をせず、十分な休息を取るようにしましょう。”)
sbBodyMsg.Append(“<br>”)
sbBodyMsg.Append(“<br>”)

sbBodyMsg.Append(“なお、熱中症のおそれがある労働者を発見した場合は、責任者に連絡し、”)
sbBodyMsg.Append(“<br>”)
sbBodyMsg.Append(“作業離脱、身体冷却、医療機関への搬送等熱中症による重篤化を防止”)
sbBodyMsg.Append(“<br>”)
sbBodyMsg.Append(“するための必要な措置を実施して下さい。”)
sbBodyMsg.Append(“<br>”)

Case 5 ‘危険
sbBodyMsg.Append(“<br>”)
sbBodyMsg.Append(“ご安全に!”)
sbBodyMsg.Append(“<br>”)
sbBodyMsg.Append(strKikenStatus)
sbBodyMsg.Append(strMaxHertInfo)
sbBodyMsg.Append(“<br>”)
sbBodyMsg.Append(strMsgTemp2)
sbBodyMsg.Append(“<br>”)
sbBodyMsg.Append(“ご留意願います。”)
sbBodyMsg.Append(“<br>”)
sbBodyMsg.Append(“<br>”)

sbBodyMsg.Append(“熱中症発症リスクが高い一日になります。”)
sbBodyMsg.Append(“<br>”)
sbBodyMsg.Append(“最低限1時間おきに休憩をとり水分・塩分の補給を行いましょう。”)
sbBodyMsg.Append(“<br>”)
sbBodyMsg.Append(“<br>”)

sbBodyMsg.Append(“狭隘箇所、タンク内工事にはファン等を事前段取りして作業開始しましょう”)
sbBodyMsg.Append(“<br>”)
sbBodyMsg.Append(“体調に異常を感じたら無理をせず、十分な休息を取るようにしましょう。”)
sbBodyMsg.Append(“<br>”)
sbBodyMsg.Append(“高齢者の方は、注意願います。”)
sbBodyMsg.Append(“<br>”)
sbBodyMsg.Append(“<br>”)

sbBodyMsg.Append(“なお、熱中症のおそれがある労働者を発見した場合は、責任者に連絡し、”)
sbBodyMsg.Append(“<br>”)
sbBodyMsg.Append(“作業離脱、身体冷却、医療機関への搬送等熱中症による重篤化を防止”)
sbBodyMsg.Append(“<br>”)
sbBodyMsg.Append(“するための必要な措置を実施して下さい。”)
sbBodyMsg.Append(“<br>”)

Case 6, 7 ‘危険+熱中症警戒アラート または 危険+熱中症特別警戒アラート
sbBodyMsg.Append(“<br>”)
sbBodyMsg.Append(“ご安全に!”)
sbBodyMsg.Append(“<br>”)
sbBodyMsg.Append(strKikenStatus)
sbBodyMsg.Append(strMaxHertInfo)
sbBodyMsg.Append(“<br>”)
sbBodyMsg.Append(strMsgTemp2)
sbBodyMsg.Append(“<br>”)
sbBodyMsg.Append(“ご留意願います。”)
sbBodyMsg.Append(“<br>”)
sbBodyMsg.Append(“<br>”)

sbBodyMsg.Append(strMsgTemp3)
sbBodyMsg.Append(“<br>”)
sbBodyMsg.Append(“熱中症発症リスクが非常に高い一日になります。”)
sbBodyMsg.Append(“<br>”)
sbBodyMsg.Append(“最低限30分おきに休憩をとり水分・塩分の補給を行いましょう。”)
sbBodyMsg.Append(“<br>”)
sbBodyMsg.Append(“<br>”)

sbBodyMsg.Append(“狭隘箇所、タンク内工事にはファン等を事前段取りして作業開始しましょう”)
sbBodyMsg.Append(“<br>”)
sbBodyMsg.Append(“体調に異常を感じたら無理をせず、十分な休息を取るようにしましょう。”)
sbBodyMsg.Append(“<br>”)
sbBodyMsg.Append(“高齢者の方は、注意願います。”)
sbBodyMsg.Append(“<br>”)
sbBodyMsg.Append(“また、責任者の方は、高齢者の方への配慮をお願いします。”)
sbBodyMsg.Append(“<br>”)
sbBodyMsg.Append(“<br>”)

sbBodyMsg.Append(“なお、熱中症のおそれがある労働者を発見した場合は、責任者に連絡し、”)
sbBodyMsg.Append(“<br>”)
sbBodyMsg.Append(“作業離脱、身体冷却、医療機関への搬送等熱中症による重篤化を防止”)
sbBodyMsg.Append(“<br>”)
sbBodyMsg.Append(“するための必要な措置を実施して下さい。”)
sbBodyMsg.Append(“<br>”)

End Select

sbBodyMsg.Append(“<br>”)
sbBodyMsg.Append($”<img src=’cid:{contentId2}’ />”)
sbBodyMsg.Append(“<br>”)
sbBodyMsg.Append(“<br>”)
sbBodyMsg.Append(“以上”)

sbBodyMsg.Append(“</BODY></HTML>”)

‘■■■その他メール送信情報■■■
Dim strMailTo As String = “”
Select Case p_strKyotenall
Case “今治”
strMailTo = ConfigurationManager.AppSettings(My.Settings.Key_MailToImabari)
Case “丸亀”
strMailTo = ConfigurationManager.AppSettings(My.Settings.Key_MailToMarugame)
Case “西条”
strMailTo = ConfigurationManager.AppSettings(My.Settings.Key_MailToSaijo)
Case “広島”
strMailTo = ConfigurationManager.AppSettings(My.Settings.Key_MailToHiroshima)
Case “多度津”
strMailTo = ConfigurationManager.AppSettings(My.Settings.Key_MailToTadotsu)
Case “あいえす”
strMailTo = ConfigurationManager.AppSettings(My.Settings.Key_MailToAiesu)
Case “しまなみ”
strMailTo = ConfigurationManager.AppSettings(My.Settings.Key_MailToShimanami)
Case “岩城”
strMailTo = ConfigurationManager.AppSettings(My.Settings.Key_MailToIwagi)
Case “新笠戸”
strMailTo = ConfigurationManager.AppSettings(My.Settings.Key_MailToKasado)
Case “南日本”
strMailTo = ConfigurationManager.AppSettings(My.Settings.Key_MailToMinamiNihon)
Case “スチールハブ”
strMailTo = ConfigurationManager.AppSettings(My.Settings.Key_MailToSteelHub)
Case “メタルファブリカ”
strMailTo = ConfigurationManager.AppSettings(My.Settings.Key_MailToM04noetalfabrica)
End Select

Dim listMailCC As String() = ConfigurationManager.AppSettings(My.Settings.Key_MailCC).Split(“,”)
Dim listMailBCC As String() = ConfigurationManager.AppSettings(My.Settings.Key_MailBCC).Split(“,”)

Dim lstTempDirPath As New List(Of String)
Dim lstTempFileName As New List(Of String)
lstTempDirPath.Add(p_strTempDirPath)
lstTempFileName.Add(p_strTempFileName)

Dim strHost As String = ConfigurationManager.AppSettings(My.Settings.Key_SmtpServer)
Dim intPort As Integer = Integer.Parse(ConfigurationManager.AppSettings(My.Settings.Key_SmtpPort_aLert))
Dim objMailMessage = New MailMessage

‘From
objMailMessage.From = New MailAddress(ConfigurationManager.AppSettings(My.Settings.Key_MailFrom_aLert))

‘To
objMailMessage.To.Add(strMailTo)

‘CC
For Each cc In listMailCC
If cc <> “” Then
objMailMessage.CC.Add(cc)
End If
Next

‘BCC
For Each bcc In listMailBCC
If bcc <> “” Then
objMailMessage.Bcc.Add(bcc)
End If
Next

‘件名
objMailMessage.Subject = strSubject

‘HTML本文ビュー作成
Dim strImagePath As String = System.IO.Path.Combine(p_strTempDirPath, p_strSaveNameJpg1)
Dim htmlView As AlternateView = AlternateView.CreateAlternateViewFromString(sbBodyMsg.ToString(), Nothing, MediaTypeNames.Text.Html)
Dim linkedImage1 As New LinkedResource(strImagePath, MediaTypeNames.Image.Jpeg)
linkedImage1.ContentId = contentId1
linkedImage1.TransferEncoding = Net.Mime.TransferEncoding.Base64
htmlView.LinkedResources.Add(linkedImage1)

strImagePath = System.IO.Path.Combine(p_strTempDirPath, p_strSaveNameJpg2)
Dim linkedImage2 As New LinkedResource(strImagePath, MediaTypeNames.Image.Jpeg)
linkedImage2.ContentId = contentId2
linkedImage2.TransferEncoding = Net.Mime.TransferEncoding.Base64
htmlView.LinkedResources.Add(linkedImage2)
objMailMessage.AlternateViews.Add(htmlView)

‘本文
objMailMessage.Body = sbBodyMsg.ToString()

‘添付ファイル
For i As Integer = 0 To lstTempDirPath.Count – 1
Dim stAttachmentsPath = lstTempDirPath(i) + “\” + lstTempFileName(i)
If stAttachmentsPath <> “” Then
Dim objAttach As New Attachment(stAttachmentsPath)
objMailMessage.Attachments.Add(objAttach)
End If
Next

‘HTML形式で送信
objMailMessage.IsBodyHtml = True
Dim objSmtp As New SmtpClient
objSmtp.Host = strHost
objSmtp.Port = intPort
objSmtp.DeliveryMethod = SmtpDeliveryMethod.Network
DI.Utilities.Logging.Logger.WriteInfo(strHost)
DI.Utilities.Logging.Logger.WriteInfo(intPort.ToString())
DI.Utilities.Logging.Logger.WriteInfo(strMailTo)

‘■■■メール送信■■■
objSmtp.Send(objMailMessage)

End Sub

”’ <summary>
”’ 指定したミリ秒だけ待機し、DoEvents を呼び出す
”’ </summary>
”’ <param name=”p_intMiliSec”>待機する時間(ミリ秒)</param>
Public Shared Sub WaitEvent(p_intMiliSec As Integer)
Threading.Thread.Sleep(p_intMiliSec)
System.Windows.Forms.Application.DoEvents()
End Sub

#End Region

End Class