Develop and Download Open Source Software

Browse Subversion Repository

Contents of /trunk/EWatch/EWatch/Actions/ActionSmtp.cs

Parent Directory Parent Directory | Revision Log Revision Log


Revision 126 - (show annotations) (download)
Tue Aug 1 11:39:52 2023 UTC (8 months, 1 week ago) by bananajinn
File size: 4016 byte(s)
パスワードを平文で書かなくていいようにしたいの修正
1 /*
2 * Created by SharpDevelop.
3 * User: banana
4 * Date: 2013/10/04
5 * Time: 17:25
6 *
7 * To change this template use Tools | Options | Coding | Edit Standard Headers.
8 */
9 using System;
10 using System.Linq;
11 using System.Net;
12 using System.Net.Mail;
13 using System.Text;
14 using EWatch.Models;
15 using EWatch.Utils;
16
17 namespace EWatch.Actions
18 {
19 /// <summary>
20 /// SMTPサーバーにメール配信を要求するアクションです。
21 /// </summary>
22 public class ActionSmtp : BaseAction
23 {
24 public const string Name = "smtp";
25
26 private string _serverHost;
27 private int _serverPort;
28
29 private object lockObject = new object();
30
31 public string ServerHost {
32 get {
33 return string.Format("{0}:{1}", _serverHost, _serverPort);
34 }
35 set {
36 string[] hostAndPort = value.Split(new char[]{ ':' });
37 _serverHost = hostAndPort[0];
38 _serverPort = 25;
39 if (hostAndPort.Length >= 2) {
40 int.TryParse(hostAndPort[1], out _serverPort);
41 }
42 }
43 }
44 public string ToAddress { get; set; }
45 public string FromAddress { get; set; }
46 public EMailSender.Protections Protection { get; set; }
47 public EMailSender.AuthenticateMethods AuthMethod { get; set; }
48 public string UserID { get; set; }
49 public string Password { get; set; }
50
51 public ActionSmtp()
52 {
53 Protection = EMailSender.Protections.None;
54 AuthMethod = EMailSender.AuthenticateMethods.None;
55 }
56
57 public override bool Validate()
58 {
59 if (Util.IsNullOrEmpty(_serverHost)) {
60 log.Error("ServerHost is not specified.");
61 return false;
62 }
63 if (Util.IsNullOrEmpty(FromAddress)) {
64 log.Error("FromAddress is not specified.");
65 return false;
66 }
67 if (Util.IsNullOrEmpty(ToAddress)) {
68 log.Error("ToAddress is not specified.");
69 return false;
70 }
71 return true;
72 }
73
74 public override void Execute(LogData data)
75 {
76 lock (lockObject) {
77 StringBuilder body = new StringBuilder();
78 body.AppendFormat("Time: {0}\r\n", data.TimeStamp.Value.ToString("yyyy-MM-dd HH:mm:ss.fff"));
79 if (!Util.IsNullOrEmpty(data.Level)) {
80 body.AppendFormat("level: {0}\r\n", data.Level);
81 body.AppendFormat("code: {0}\r\n", data.Code);
82 }
83 if (!Util.IsNullOrEmpty(data.Name)) {
84 body.AppendFormat("name: {0}\r\n", data.Name);
85 }
86 if (!Util.IsNullOrEmpty(data.HostName)) {
87 body.AppendFormat("host: {0}\r\n", data.HostName);
88 }
89 if (!Util.IsNullOrEmpty(data.Source)) {
90 body.AppendFormat("source: {0}\r\n", data.Source);
91 }
92 body.AppendFormat("{0}\r\n", data.Message);
93 var subject = string.Format("[{0}] {1}", data.HostName, data.Message);
94 if (!string.IsNullOrEmpty(data.Name))
95 subject = string.Format("[{0}]{1}", data.Name, subject);
96 Send(GetSubject(subject),
97 body.ToString(),
98 data.Level == "E");
99 }
100 }
101
102 private string GetSubject(string value)
103 {
104 if (!string.IsNullOrEmpty(value)) {
105 // 改行があればそこで区切る
106 var array = value.Split('\n');
107 value = array[0];
108 // 76文字以上ならそこで区切る
109 if (value.Length > 76)
110 value = value.Substring(0, 76);
111 }
112 return value;
113 }
114
115 private void Send(string subject, string body, bool urgent)
116 {
117 var pw = DecryptPassword(Password);
118 using (var sender = new EMailSender(_serverHost, _serverPort,
119 Protection, AuthMethod,
120 UserID, pw, null)) {
121 sender.Send(subject, body,
122 new MailAddress(FromAddress),
123 ToAddress.Split(',').Select(x => new MailAddress(x)).ToArray(),
124 null, null, urgent);
125 }
126 }
127
128 private string DecryptPassword(string value)
129 {
130 if (!Util.IsNullOrEmpty(value)) {
131 try {
132 return CryptUtil.Decrypt(value, Dns.GetHostName(), null);
133 } catch (FormatException e) {
134 }
135 }
136 return value;
137 }
138 }
139 }

Back to OSDN">Back to OSDN
ViewVC Help
Powered by ViewVC 1.1.26