mailsender

This commit is contained in:
2026-02-10 10:20:12 +01:00
parent 48e3950675
commit 27624c160b
10 changed files with 290 additions and 9 deletions

View File

@@ -1,4 +1,5 @@
Imports System.Data.SqlClient
Imports System.Runtime.InteropServices
Imports System.Data.SqlClient
Imports System.IO
Imports System.Net
Imports System.Net.Mail
@@ -50,7 +51,7 @@ Module Mail
'Exit Sub
' PARAM = "TETRAPAK_OKT"
' PARAM = "MDM_IT_Verguetung"
'PARAM = "JAHRESABRECHNUNG AG-ZS"
' PARAM = "UID_OPS_SYSKA_ABGLEICH"
@@ -408,6 +409,17 @@ Module Mail
If MDM_Zollbuero_Verguetung(Jahr) Then 'für Andreas Details
System.Console.WriteLine("Vorgang erfolgreich abgeschlossen ...")
End If
Case "MDM_IT_Verguetung"
System.Console.WriteLine("OPTION erkannt: MDM_IT_Verguetung _ Erstellt die Auswertung der durchgeführten MDM Transaktionen.")
System.Console.WriteLine("Auswertung gestartet...")
Dim Jahr = -1
If (parameter.Count - 1) >= 2 Then
Jahr = parameter(2)
System.Console.WriteLine("Parameter 'Jahr' erkannt: " & Jahr)
End If
If MDM_IT_Verguetung(Jahr) Then 'für Andreas Details
System.Console.WriteLine("Vorgang erfolgreich abgeschlossen ...")
End If
Case "Kassenbuch_Zufall"
System.Console.WriteLine("OPTION erkannt: Kassenbuch_Zufall - Zufallsziehung zur Kassenkontrolle.")
System.Console.WriteLine("Vorgang gestartet...")
@@ -1359,6 +1371,77 @@ Module Mail
Return False
End Function
Private Function MDM_IT_Verguetung(Jahr) As Boolean
Dim Msg As New MailMessage
Dim myCredentials As New System.Net.NetworkCredential
myCredentials.UserName = "al@verag.ag"
myCredentials.Password = "verag#2"
Msg.IsBodyHtml = False
Dim mySmtpsvr As New SmtpClient()
mySmtpsvr.Host = "owa.verag.ag"
mySmtpsvr.Port = 587 '25 '587 '25
mySmtpsvr.UseDefaultCredentials = False
mySmtpsvr.Credentials = myCredentials
System.Console.WriteLine("E-Mail Daten initialisiert...")
Try
Dim datum As String = Now.AddDays(-1).ToShortDateString
System.Console.WriteLine("Erstelle EXCEL...")
Dim excel As String = genEXCEL_MDM_IT(Jahr)
System.Console.WriteLine("EXCEL erstellt...")
If excel <> "" And Not excel.StartsWith("ERROR: ") Then
System.Console.WriteLine("Sende E-Mail...")
Msg.From = New MailAddress("al@verag.ag")
' Msg.To.Add("Viktoria.Leirich@imex-group.at")
Msg.To.Add("as@verag.ag")
Msg.To.Add("sales@verag.ag")
'' Msg.To.Add("jl@verag.ag")
'' Msg.Bcc.Add("al@verag.ag")
Msg.CC.Add("jl@verag.ag")
Msg.CC.Add("al@verag.ag")
Msg.Subject = "Auswertung MDM-IT Vergütung"
Msg.Body = "Anbei befindet sich die Auswertung der MDM-IT Vergütung" &
"." & vbNewLine & vbNewLine & "Erstellt am: " & Now.ToShortDateString & ", um " & Now.ToShortTimeString &
vbNewLine & vbNewLine & vbNewLine & "Automatisch generiertes E-Mail."
Dim attachment1 As Attachment = New Attachment(File.OpenRead(excel), "Auswertung.xlsx")
Msg.Attachments.Add(attachment1)
mySmtpsvr.Send(Msg)
System.Console.WriteLine("E-Mail gesendet.")
System.Console.WriteLine("Erfolgreich!")
Return True
Else
System.Console.WriteLine(excel)
End If
Catch ex As Exception
Try
mySmtpsvr.Port = 25
mySmtpsvr.Send(Msg)
Catch ex2 As Exception
Try
mySmtpsvr.Host = "192.168.0.107"
mySmtpsvr.Port = 25
mySmtpsvr.Send(Msg)
Catch ex3 As Exception
MsgBox(ex3.Message & ex3.StackTrace)
Return False
End Try
End Try
End Try
Return False
End Function
Private Function SendEmail_OP5000(firma As String, LandEinschr As String, Mail_to() As String, Mail_cc() As String, Mail_bcc() As String, Mail_Subject As String) As Boolean
' send()
@@ -3065,6 +3148,154 @@ Module Mail
End Function
Public Function genEXCEL_MDM_IT(ByVal Jahr As Integer) As String
Dim exclApp As Object = Nothing
Dim Datei As Object = Nothing
Dim Blatt As Object = Nothing
Try
Dim yearVal As Integer = If(Jahr > 0, Jahr, Now.AddMonths(-1).Year)
exclApp = CreateObject("Excel.Application")
With exclApp
.Visible = False
.DisplayAlerts = False
Dim filepath As String = sPath & "MDM_IT_Verguetung.xlsx"
'Template aus Resources schreiben
Try
My.Computer.FileSystem.WriteAllBytes(filepath, My.Resources.MDM_it_Verguetung, False)
Catch ex As Exception
Return "ERROR 01: " & ex.Message & vbNewLine & ex.StackTrace
End Try
Datei = .Workbooks.Open(filepath)
Blatt = Datei.Worksheets("CS") ' ggf. anpassen
' Jahr eintragen (wie bisher)
Blatt.Range("G1").Value = yearVal
' --- Zielbereich leeren (nur Wertebereich, nicht Monatsnamen/Überschriften) ---
' Monate sind i.d.R. Zeile 7-18 (12 Monate). Spalten B-F
Blatt.Range("B8:F19").ClearContents()
' --- SQL 1x laden: alle Monate / Datenquellen ---
Dim sqlstr As String =
"SELECT * FROM (
SELECT
COUNT(*) AS Anzahl,
'IDS' AS Datenquelle,
MONTH(t.YearMonthDay) AS [Month],
YEAR(t.YearMonthDay) AS [Year]
FROM tblIDSTransactionsNew t
INNER JOIN tbl_IDS_Länder l ON t.OutletCountryCode = l.OutletCountryCode
INNER JOIN tbl_IDS_Produkte p ON t.ProductTypeCode = p.ProductTypeCode
WHERE YEAR(t.YearMonthDay) = " & yearVal & "
GROUP BY MONTH(t.YearMonthDay), YEAR(t.YearMonthDay)
UNION ALL
SELECT
COUNT(*) AS Anzahl,
Datenquelle,
MONTH([Transaction date]) AS [Month],
YEAR([Transaction date]) AS [Year]
FROM [VERAG].[dbo].[tblMautbericht]
WHERE YEAR([Transaction date]) = " & yearVal & "
GROUP BY Datenquelle, MONTH([Transaction date]), YEAR([Transaction date])
) AS temp
ORDER BY Datenquelle, temp.[Year], temp.[Month];"
Dim dt As DataTable = loadDgvBySqlFMZOLL(sqlstr)
' --- Map (Datenquelle, Monat) -> Anzahl ---
Dim map As New Dictionary(Of String, Integer)(StringComparer.OrdinalIgnoreCase)
If dt IsNot Nothing AndAlso dt.Rows.Count > 0 Then
For Each r As DataRow In dt.Rows
Dim src As String = If(r("Datenquelle") Is DBNull.Value, "", CStr(r("Datenquelle")).Trim())
' Sonderzuordnung
If src.Equals("AT", StringComparison.OrdinalIgnoreCase) Then
src = "ASFINAG"
End If
Dim m As Integer = If(r("Month") Is DBNull.Value, 0, Convert.ToInt32(r("Month")))
Dim cnt As Integer = If(r("Anzahl") Is DBNull.Value, 0, Convert.ToInt32(r("Anzahl")))
If m >= 1 AndAlso m <= 12 AndAlso src <> "" Then
Dim key As String = src & "|" & m.ToString()
' Falls doppelte Zeilen vorkommen, addieren wir (sicherer)
If map.ContainsKey(key) Then
map(key) += cnt
Else
map(key) = cnt
End If
End If
Next
End If
' --- Spaltenmapping Datenquelle -> Excel-Spalte ---
Dim col As New Dictionary(Of String, String)(StringComparer.OrdinalIgnoreCase) From {
{"IDS", "B"},
{"PLOSE", "C"},
{"ASFINAG", "D"},
{"MSE", "E"},
{"UTA", "F"}
}
' --- Schreiben: Monate 1..12 in Zeilen 7..18 ---
For monthIdx As Integer = 1 To 12
Dim rowExcel As Integer = 7 + monthIdx ' 7..18
For Each kvp In col
Dim src As String = kvp.Key
Dim colLetter As String = kvp.Value
Dim key As String = src & "|" & monthIdx.ToString()
Dim value As Integer = 0
If map.ContainsKey(key) Then value = map(key)
Blatt.Range(colLetter & rowExcel.ToString()).Value = value
Next
Next
Datei.Save()
Try : Datei.Close(True) : Catch : End Try
Try : .Quit() : Catch : End Try
End With
Return sPath & "MDM_IT_Verguetung.xlsx"
Catch ex As Exception
Return "ERROR 02: " & ex.Message & vbNewLine & ex.StackTrace
Finally
' COM sauber freigeben (verhindert EXCEL.EXE-Leichen)
Try
If Blatt IsNot Nothing Then Marshal.FinalReleaseComObject(Blatt)
Catch
End Try
Try
If Datei IsNot Nothing Then Marshal.FinalReleaseComObject(Datei)
Catch
End Try
Try
If exclApp IsNot Nothing Then Marshal.FinalReleaseComObject(exclApp)
Catch
End Try
Blatt = Nothing
Datei = Nothing
exclApp = Nothing
GC.Collect()
GC.WaitForPendingFinalizers()
GC.Collect()
End Try
End Function
Public Function genEXCEL_DEPOT(KundenNr) As String

View File

@@ -101,9 +101,9 @@
<ItemGroup>
<EmbeddedResource Include="My Project\Resources.resx">
<Generator>VbMyResourcesResXFileCodeGenerator</Generator>
<LastGenOutput>Resources.Designer.vb</LastGenOutput>
<CustomToolNamespace>My.Resources</CustomToolNamespace>
<SubType>Designer</SubType>
<LastGenOutput>Resources.Designer.vb</LastGenOutput>
</EmbeddedResource>
</ItemGroup>
<ItemGroup>
@@ -119,12 +119,8 @@
<None Include="App.config" />
<None Include="Resources\Auswertung_divers.xlsx" />
<None Include="Resources\Detailauswertung_divers.xlsx" />
<None Include="Resources\MDM_AI_Verguetung.xlsx">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Include="Resources\MDM_IT_Verguetung.xlsx">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Include="Resources\MDM_AI_Verguetung.xlsx" />
<None Include="Resources\MDM_IT_Verguetung.xlsx" />
<None Include="Resources\MDM_ZOLL_Verguetung.xlsx">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>

View File

@@ -100,6 +100,26 @@ Namespace My.Resources
End Get
End Property
'''<summary>
''' Sucht eine lokalisierte Ressource vom Typ System.Byte[].
'''</summary>
Friend ReadOnly Property MDM_AI_Verguetung() As Byte()
Get
Dim obj As Object = ResourceManager.GetObject("MDM_AI_Verguetung", resourceCulture)
Return CType(obj,Byte())
End Get
End Property
'''<summary>
''' Sucht eine lokalisierte Ressource vom Typ System.Byte[].
'''</summary>
Friend ReadOnly Property MDM_IT_Verguetung() As Byte()
Get
Dim obj As Object = ResourceManager.GetObject("MDM_IT_Verguetung", resourceCulture)
Return CType(obj,Byte())
End Get
End Property
'''<summary>
''' Sucht eine lokalisierte Ressource vom Typ System.Byte[].
'''</summary>

View File

@@ -130,6 +130,12 @@
<data name="Detailauswertung_divers" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\Detailauswertung_divers.xlsx;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="MDM_AI_Verguetung" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\MDM_AI_Verguetung.xlsx;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="MDM_IT_Verguetung" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\MDM_IT_Verguetung.xlsx;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="MDM_ZOLL_Verguetung" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\resources\mdm_zoll_verguetung.xlsx;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>

View File

@@ -980,6 +980,8 @@
<None Include="Resources\DienstplanATILLA.xlsx">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Include="Resources\MDM_AI_Verguetung.xlsx" />
<None Include="Resources\MDM_IT_Verguetung.xlsx" />
<None Include="rptIntAusbAG.rpx">
<SubType>Component</SubType>
<CopyToOutputDirectory>Always</CopyToOutputDirectory>

View File

@@ -424,6 +424,26 @@ Namespace My.Resources
End Get
End Property
'''<summary>
''' Sucht eine lokalisierte Ressource vom Typ System.Byte[].
'''</summary>
Friend ReadOnly Property MDM_AI_Verguetung() As Byte()
Get
Dim obj As Object = ResourceManager.GetObject("MDM_AI_Verguetung", resourceCulture)
Return CType(obj,Byte())
End Get
End Property
'''<summary>
''' Sucht eine lokalisierte Ressource vom Typ System.Byte[].
'''</summary>
Friend ReadOnly Property MDM_IT_Verguetung() As Byte()
Get
Dim obj As Object = ResourceManager.GetObject("MDM_IT_Verguetung", resourceCulture)
Return CType(obj,Byte())
End Get
End Property
'''<summary>
''' Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap.
'''</summary>

View File

@@ -316,4 +316,10 @@
<data name="sdl_ico1" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\sdl_ico2.ico;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="MDM_AI_Verguetung" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\MDM_AI_Verguetung.xlsx;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="MDM_IT_Verguetung" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\MDM_IT_Verguetung.xlsx;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
</root>

Binary file not shown.

Binary file not shown.