우리메일 API를 이용한 배치 스크립트
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
#!/bin/bash
######### NOTICE ##############
# Itsm 요청이 왔을 때
# 메일 발송되는 것이 목적이라서
# 아래 소스는 ChatGPT로
# 최소한의 로직만 구현했습니다
###############################
######## MAIL API ############
# 우리메일(WOORIMAIL)
# https://woorimail.com
#
# 월 1만건 무료 발송 가능합니다
# 메일 1만건 모두 소진 시
# 당월 메일 발송이 중지됩니다
##############################
###### TIME SETTING ###########
# 현재 9시 ~ 18시까지만
# 동작하도록 세팅되어있으니
# 수정이 필요하면 아래 함수에서
# 시간 수정 부탁드립니다
# check_working_hours()
###############################
##### RECEIVER INFO ###########
# 메일 발신자 정보 수정은
# 60번 줄 영역에 있는 값을
# 수정해주시면 됩니다
###############################
# Function to make API call and check response
check_response() {
# API details
METHOD="POST"
CONTENT_TYPE="application/x-www-form-urlencoded"
ITSM_CHECK_URL="" # ITSM 접수대기 건수 URL
ITSM_LIST_URL="" # ITSM 접수대기 리스트 URL
BODY="id=1520" # 접수대기(1520), 처리중(1526)
# ITSM 처리중
#ITSM_LIST_URL=""
#BODY="id=1526"
# 고정값
MAIL_URL="https://woorimail.com/"
TYPE="api"
MID="auth_woorimail"
ACT="dispWwapimanagerMailApi"
DOMAIN="" # 지정한 도메인 URL
AUTHKEY="" # 키값
##################################################
# 아래처럼 세팅했을 경우 메일은 다음과 같이 발송됩니다
#
# 발신자: YuY<wms_nick@mx.woorimail.com>
# 회신할 경우, 받는사람: ID@이메일주소
##################################################
WMS_NICK="wms_nick" # 보낸사람 계정
SENDER_EMAIL="" # 회신할 사람 이메일
SENDER_NICKNAME="YuY" # 회신할 사람 닉네임
RECEIVER_NICKNAME="" # 받는 사람(나) 닉네임
RECEIVER_EMAIL=$RECEIVER_EMAIL # 받는 사람(나) 이메일
# Add cookies to the request
COOKIE="JSESSIONID=$JSESSIONID" # ITSM JSessionID 값
# Make the API call and print the response
RESPONSE=$(curl -s -X $METHOD \
-H "Content-Type: $CONTENT_TYPE" \
-H "Cookie: $COOKIE" \
-d "$BODY" \
$ITSM_CHECK_URL)
# Extract result value from RESPONSE message
RESULT_ITSM_READY_CNT=$(echo "$RESPONSE" | grep -oP 'result: \(\K[0-9]+')
# Check if RESULT is greater than 0 and show dialog
if validate_email "$RECEIVER_EMAIL"; then
if [ "$RESULT_ITSM_READY_CNT" -gt 0 ]; then
RESPONSE=$(curl -s -X $METHOD \
-H "Content-Type: $CONTENT_TYPE" \
-H "Cookie: $COOKIE" \
-d "$BODY" \
$ITSM_LIST_URL)
RESULT_ITSM_READY_LIST=$(echo "$RESPONSE" | sed -n '/<table width="100%"/,/<\/table>/p' | sed -n '1,/<\/table>/p' | grep -o '<td[^>]*>[^<]*</td>' | sed -E 's/<\/?td[^>]*>//g')
RESULT_ITSM_ALL_HTML=$(echo "$RESPONSE" | sed ':a;N;$!ba;s/\n/ /g' | grep -oP '<table width="100%".*?</table>')
# Convert the multiline string to an array
IFS=$'\n' read -r -d '' -a TD_VALUES_ARRAY <<< "$RESULT_ITSM_READY_LIST"
MAIL_TITLE="ITSM "
# Process the array in chunks of 7
num_values=${#TD_VALUES_ARRAY[@]}
for ((i = 0; i < num_values; i += 7)); do
MAIL_TITLE="$MAIL_TITLE ${TD_VALUES_ARRAY[i]} "
done
MAIL_TITLE=$(url_encode "$MAIL_TITLE")
MAIL_CONTENT=$(url_encode "ITSM 대기건수: $RESULT_ITSM_READY_CNT 건 $RESULT_ITSM_ALL_HTML")
MAIL_BODY="authkey=$AUTHKEY&domain=$DOMAIN&type=$TYPE&mid=$MID&act=$ACT&callback=&title=$MAIL_TITLE&content=$MAIL_CONTENT&wms_domain=woorimail.com&wms_nick=$WMS_NICK&sender_email=$SENDER_EMAIL&sender_nickname=$SENDER_NICKNAME&receiver_nickname=$RECEIVER_NICKNAME&receiver_email=$RECEIVER_EMAIL&member_regdate=20240604170101"
RESPONSE=$(curl -s -X $METHOD \
-H "Content-Type: $CONTENT_TYPE" \
-d "$MAIL_BODY" \
$MAIL_URL)
echo "Ready Itsm: $RESULT_ITSM_READY_CNT, $RESPONSE"
else
echo "Empty Itsm."
fi
else
echo "Invalid email format. Please provide a valid email address."
fi
}
# Function to check if current time is within working hours
check_working_hours() {
current_hour=$(date +%H)
if [ "$current_hour" -ge 9 ] && [ "$current_hour" -lt 18 ]; then
return 0 # Within working hours
else
return 1 # Outside working hours
fi
}
# Function to validate email format
validate_email() {
# Regular expression for email validation
regex='^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}$'
if [[ $1 =~ $regex ]]; then
return 0 # Valid email format
else
return 1 # Invalid email format
fi
}
# Function to URL encode a string
url_encode() {
local string="${1}"
local encoded=""
# Convert the string to hex representation
hex_string=$(echo -n "$string" | od -An -tx1 | tr ' ' '\n' | grep -v '^$')
# Iterate over each character in the hex string
for hex_char in $hex_string; do
encoded+="%$hex_char"
done
echo "$encoded"
}
INTRODUCTION="
################################################
###### ITSM 로그인 후
###### 쿠키에 등록된 JSESSIONID 값을 입력해주세요
################################################
################################################
# 입력 파라미터, 몇분마다 이메일로 발송할지 세팅
# 1: 시간, 분(minute)
# 2: 이메일 주소
#
# ex) ./checkItsm.sh 5 이메일주소
# -> 5분마다 접수대기 중인 itsm을 체크하여
# -> 1건 이상 있을 경우 입력한 이메일로 발송
#
# Itsm이 장시간으로 접수대기 상태인 경우가 많을수록
# 시간을 길게 세팅하는게 좋습니다
# 권장 시간(분) 5 ~ 20
################################################
값을 제대로 입력하면 아래와 같은 형식의 문구가 나옵니다
- 접수대기 건수가 없는 경우
> Empty Itsm.
- 접수대기 건수가 있는 경우, 메일 발송
> Ready Itsm: 1, result: ~~, error_msg: ~~ ...
JSESSIONID: "
# Prompt user to input JSESSIONID
read -p "$INTRODUCTION" JSESSIONID
# Check if the second argument is provided
if [ -z "$2" ]; then
echo "Please provide a RECEIVER_EMAIL as the second argument."
exit 1
else
RECEIVER_EMAIL="$2"
fi
# Check if argument is provided for interval, default is set to 5 minutes
interval=${1:-5}
# Loop indefinitely and check response every $interval minutes
while true; do
# Check if current time is within working hours
if ! check_working_hours; then
echo "Outside working hours. Exiting..."
exit 0
fi
check_response
sleep "$interval"m
done
This post is licensed under CC BY 4.0 by the author.