-
Notifications
You must be signed in to change notification settings - Fork 2
/
_ImapSync
364 lines (311 loc) · 12.8 KB
/
_ImapSync
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
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
#!/bin/bash
#+----------------GERANDO LOG-----------------------+OK"
SCRIPT=`basename $0`
LOG=`echo /Scripts_Zimbra/$SCRIPT.log | sed s/'.sh'/'.log'/g`
exec &> >(tee -a "$LOG")
echo "[`date`] ==== Inicio de rotina..."
#+----------------GERANDO LOG-----------------------+OK"
clear
#Checa se o usuario é root
LOCAL_USER=`id -u -n`
if [ $LOCAL_USER != "root" ] ; then
echo " Rodar como usuario root"
echo " saindo..."
echo ""
exit
fi
dir="Diretorio Atual : `pwd`"
hostname="Hostname : `hostname --fqdn`"
ip="IP : `ifconfig | awk 'NR>=2 && NR<=2' | awk '{print $3}'`"
versaoso="Versao S.O. : `lsb_release -d | cut -d : -f 2- | sed 's/^[ \t]*//;s/[ \t]*$//'`"
release="Release : `lsb_release -r | cut -d : -f 2- | sed 's/^[ \t]*//;s/[ \t]*$//'`"
codename="Codename : `lsb_release -c | cut -d : -f 2- | sed 's/^[ \t]*//;s/[ \t]*$//'`"
kernel="Kernel : `uname -r`"
arquitetura="Arquitetura : `uname -m`"
versaozimbra="Versao Zimbra : `su - zimbra -c 'zmcontrol -v'`"
echo "+-------------------------------------------------+"
echo "| Utilitario para Zimbra v1.33 |"
echo "+-------------------------------------------------+"
echo "+-------------------------------------------------+"
echo "| Escrito por: |"
echo "| Thiago Castro - www.hostlp.cloud |"
echo "+-------------------------------------------------+"
echo
echo $dir
echo "+-------------------------------------------------+"
echo $hostname
echo "+-------------------------------------------------+"
echo $ip
echo "+-------------------------------------------------+"
echo $versaoso
echo "+-------------------------------------------------+"
echo $release
echo "+-------------------------------------------------+"
echo $codename
echo "+-------------------------------------------------+"
echo $kernel
echo "+-------------------------------------------------+"
echo $arquitetura
echo "+-------------------------------------------------+"
echo $versaozimbra
echo "+-------------------------------------------------+"
echo
echo "Aperte <ENTER> para continuar e começar..."
read
echo
echo "==================EXECUTANDO======================="
echo
#Instalando ImapSync
echo "Deseja instalar ImapSync? - Sim/Nao"
read CONFIRMA
case $CONFIRMA in
s|S|Sim|sim)
sudo apt update
sudo apt-get install apt-file makepasswd rcs perl-doc libio-tee-perl git libmail-imapclient-perl libdigest-md5-file-perl libterm-readkey-perl libfile-copy-recursive-perl build-essential make automake libunicode-string-perl libauthen-ntlm-perl libcrypt-ssleay-perl libdigest-hmac-perl libfile-copy-recursive-perl libio-compress-perl libio-socket-inet6-perl libio-socket-ssl-perl libio-tee-perl libmodule-scandeps-perl libnet-ssleay-perl libpar-packer-perl libreadonly-perl libterm-readkey-perl libtest-pod-perl libtest-simple-perl libunicode-string-perl liburi-perl cpanminus libssl-dev -y
sudo apt-get install apt-file libauthen-ntlm-perl libclass-load-perl libcrypt-ssleay-perl liburi-perl libdata-uniqid-perl libdigest-hmac-perl libdist-checkconflicts-perl libfile-copy-recursive-perl libio-compress-perl libio-socket-inet6-perl libio-socket-ssl-perl libio-tee-perl libmail-imapclient-perl libmodule-scandeps-perl libnet-ssleay-perl libpar-packer-perl libreadonly-perl libsys-meminfo-perl libterm-readkey-perl libtest-fatal-perl libtest-mock-guard-perl libtest-pod-perl libtest-requires-perl libtest-simple-perl libunicode-string-perl -y
sudo cpan -i Encode::IMAPUTF7 JSON::WebToken Test::MockObject Unicode::String Data::Uniqid Sys::MemInfo Regexp::Common JSON::WebToken::Crypt::RSA Dist::CheckConflicts Crypt::OpenSSL::RSA File::Tail CGI Proc::ProcessTable Test::Deep IO::Socket::SSL
sudo cpan -i Encode::IMAPUTF7 JSON::WebToken Test::MockObject Unicode::String Data::Uniqid Sys::MemInfo Regexp::Common JSON::WebToken::Crypt::RSA Dist::CheckConflicts Crypt::OpenSSL::RSA File::Tail CGI Proc::ProcessTable Test::Deep IO::Socket::SSL
cd /usr/src
wget https://github.com/imapsync/imapsync/archive/refs/heads/master.zip
unzip master.zip
rm -rf master.zip
mv imapsync-master/ imapsync
#git clone git://github.com/imapsync/imapsync.git
cd imapsync
mkdir dist
sudo make install
echo
echo
echo "Verifique se tudo correu bem com a instalação"
echo
echo "Aperte <ENTER> para começar a sincronização..."
echo "Aperte <Ctr+C> para Sair..."
read
echo
;;
n|N|Nao|nao)
;;
*) echo "Opcao Invalida" ;; esac
############################################################
clear
#Parametros
SERVERNAME=$HOSTNAME
SCRIPT_NAME="$SERVERNAME - Script IMAP TO IMAP"
MAIL=/opt/zimbra/common/sbin/sendmail;
echo -n "E-mail para Notificação: "
read EMAIL
MAIL_RECIPIENT="$EMAIL"
LOCK_FILE="/tmp/$SERVERNAME.imapsync.lockfile"
LOGFILE="ImapSync.log"
#Caminho do LOG
#mkdir LOG_imapsync/
#chmod 775 LOG_imapsync/
#host1 Origem
echo -n "Servidor de Origiem: "
read HOST_ORG
HOST1="$HOST_ORG"
#host2 Destino
echo -n "Servidor de Destino: "
read HOST_DST
HOST2="$HOST_DST"
#domain é onde a conta de e-mail tem "tudo após o @"
echo -n "Dominio: "
read DOMAIN_MIG
DOMAIN="$DOMAIN_MIG"
echo
echo "Aperte <ENTER> para começar a migração..."
echo
read
Principal() {
clear
echo "Escolha qual forma de Migração"
echo "Opcoes:"
echo "1. Zimbra para Zimbra - Sem precisar de senha das contas somente do admin"
echo "2. Imap para Imap - Utiliza a lista Contas-ImapSync para sincronizar"
echo "3. Zimbra para Imap - Utiliza as contas do Zimbra e senha padrão de base"
echo "4. Imap1 para Imap2 - Solicita os dados das contas em individuais"
echo
echo "5. Sair"
echo
echo
echo -n "Entre com a opcao desejada => "
read opcao
echo
case $opcao in
1) Z2Z ;;
2) I2I ;;
3) Z2I ;;
4) I1I2 ;;
5) exit ;;
*) "Opcao desconhecida." ; echo ; Principal ;;
esac
}
############################################################
#Começo do Script do Zimbra to Zimbra
Z2Z() {
SUBJECT="IMAPSync Iniciado"
MESSAGE="'$SCRIPT_NAME' Iniciado"
#echo "IMAPSync Finalizado" | $MAIL -s "[$SCRIPT_NAME] Iniciado" $MAIL_RECIPIENT
echo "Subject: $SUBJECT
$MESSAGE" | "$MAIL" "$MAIL_RECIPIENT"
TIME_NOW=$(date +"%Y-%m-%d %T")
echo "" >> $LOGFILE
echo "------------------------------------" >> $LOGFILE
echo "IMAPSync Iniciado Z2Z - $TIME_NOW" >> $LOGFILE
echo "" >> $LOGFILE
echo -n "Conta Administrador Zimbra de Origem: "
read ADMIN_ORIG
ADMIN_ORIGEM="$ADMIN_ORIG"
echo -n "Senha: "
read PASSADMIN_ORIG
PASSWORDADMIN_ORIGEM="$PASSADMIN_ORIG"
echo
echo -n "Conta Administrador Zimbra de Destino: "
read ADMIN_DEST
ADMIN_DESTINO="$ADMIN_DEST"
echo -n "Senha: "
read PASSADMIN_DEST
PASSWORDADMIN_DESTINO="$PASSADMIN_DEST"
ZMPROV="/opt/zimbra/bin/zmprov"
for USER in $($ZMPROV -l gaa); do
imapsync --nolog --no-modulesversion --buffersize 8192000 --addheader --nosyncacls --subscribe --syncinternaldates --noauthmd5 --nofoldersizes --skipsize --errorsmax 100000 \
--host1 $HOST1 --user1 $USER --authuser1 $ADMIN_ORIGEM --password1 $PASSWORDADMIN_ORIGEM --authmech1 PLAIN \
--host2 $HOST2 --user2 $USER --authuser2 $ADMIN_DESTINO --password2 $PASSWORDADMIN_DESTINO --authmech2 PLAIN \
--regexflag 's/.*?(?:(\\(?:Answered|Flagged|Deleted|Seen|Draft)\s?)|$)/defined($1)?$1:q()/eg'
done
echo "Finalizado $USER_NAME $TIME_NOW" >> $LOGFILE
echo "" >> $LOGFILE
TIME_NOW=$(date +"%Y-%m-%d %T")
echo "" >> $LOGFILE
echo "IMAPSync Finalizado Z2Z - $TIME_NOW" >> $LOGFILE
echo "------------------------------------" >> $LOGFILE
EMAIL
}
############################################################
#Começo do Script do Imap to Imap
I2I() {
echo "NÃO ESQUEÇA DE CRIAR O ARQUIVO "Contas-ImapSync em /Scripts_Zimbra/""
echo " COM CONTEUDO DE "usuario":"senha""
read
echo "Usuario:Senha" >> /Scripts_Zimbra/Contas-ImapSync
#if [ ! -e $LOCK_FILE ]; then
#touch $LOCK_FILE
SUBJECT="IMAPSync Iniciado"
MESSAGE="'$SCRIPT_NAME' Iniciado"
#echo "IMAPSync Finalizado" | $MAIL -s "[$SCRIPT_NAME] Iniciado" $MAIL_RECIPIENT
echo "Subject: $SUBJECT
$MESSAGE" | "$MAIL" "$MAIL_RECIPIENT"
TIME_NOW=$(date +"%Y-%m-%d %T")
echo "" >> $LOGFILE
echo "------------------------------------" >> $LOGFILE
echo "IMAPSync Iniciado I2I - $TIME_NOW" >> $LOGFILE
echo "" >> $LOGFILE
{ while IFS=':' read u1 p1; do
USER_NAME=$u1"@"$DOMAIN
imapsync --nolog --no-modulesversion --buffersize 8192000 --addheader --nosyncacls --subscribe --syncinternaldates --noauthmd5 --nofoldersizes --skipsize --errorsmax 100000 \
--host1 $HOST1 --user1 "$USER_NAME" --password1 "$p1" \
--host2 $HOST2 --user2 "$USER_NAME" --password2 "$p1"
#Para importar do GMail
#imapsync --nolog --no-modulesversion --buffersize 8192000 --addheader --noauthmd5 --maxbytespersecond 10000 --automap --exclude "\[Gmail\]$" \
--host1 $HOST1 --ssl1 --user1 "$USER_NAME" --password1 "$p1" \
--host2 $HOST2 --ssl2 --user2 "$USER_NAME" --password2 "$p1"
done ; } < /Scripts_Zimbra/Contas-ImapSync
TIME_NOW=$(date +"%Y-%m-%d %T")
echo "Finalizado $USER_NAME $TIME_NOW" >> $LOGFILE
echo "" >> $LOGFILE
echo "" >> $LOGFILE
echo "IMAPSync Finalizado I2I - $TIME_NOW" >> $LOGFILE
echo "------------------------------------" >> $LOGFILE
EMAIL
}
############################################################
#Começo do Script do Zimbra to Imap
Z2I() {
SUBJECT="IMAPSync Iniciado"
MESSAGE="'$SCRIPT_NAME' Iniciado"
#echo "IMAPSync Finalizado" | $MAIL -s "[$SCRIPT_NAME] Iniciado" $MAIL_RECIPIENT
echo "Subject: $SUBJECT
$MESSAGE" | "$MAIL" "$MAIL_RECIPIENT"
TIME_NOW=$(date +"%Y-%m-%d %T")
echo "" >> $LOGFILE
echo "------------------------------------" >> $LOGFILE
echo "IMAPSync Iniciado - $TIME_NOW" >> $LOGFILE
echo "" >> $LOGFILE
echo -n "Senha padrão: "
read PASS_DEFAULT
PASSDEFAULT="$PASS_DEFAULT"
ZMPROV="/opt/zimbra/bin/zmprov"
for USER in $($ZMPROV -l gaa |grep "$DOMAIN" | egrep -v "^virus|^ham|^spam|^galsync"); do
imapsync --nolog --no-modulesversion --buffersize 8192000 --addheader --nosyncacls --subscribe --syncinternaldates --noauthmd5 --nofoldersizes --skipsize --errorsmax 100000 \
--host1 $HOST1 --user1 "$USER" --password1 "$PASS_DEFAULT" \
--host2 $HOST2 --user2 "$USER" --password2 "$PASS_DEFAULT"
done
echo "Finalizado $USER_NAME $TIME_NOW" >> $LOGFILE
echo "" >> $LOGFILE
TIME_NOW=$(date +"%Y-%m-%d %T")
echo "" >> $LOGFILE
echo "IMAPSync Finalizado - $TIME_NOW" >> $LOGFILE
echo "------------------------------------" >> $LOGFILE
EMAIL
}
############################################################
#Começo do Script do Imap1 to Imap2
I1I2() {
SUBJECT="IMAPSync Iniciado"
MESSAGE="'$SCRIPT_NAME' Iniciado"
#echo "IMAPSync Finalizado" | $MAIL -s "[$SCRIPT_NAME] Iniciado" $MAIL_RECIPIENT
echo "Subject: $SUBJECT
$MESSAGE" | "$MAIL" "$MAIL_RECIPIENT"
TIME_NOW=$(date +"%Y-%m-%d %T")
echo "" >> $LOGFILE
echo "------------------------------------" >> $LOGFILE
echo "IMAPSync Iniciado - $TIME_NOW" >> $LOGFILE
echo "" >> $LOGFILE
echo -n "Conta de Origem: "
read USER_ORIG1
PASSDEFAULT="$USER_ORIG1"
echo -n "Senha : "
read PASS_ORIG1
PASSDEFAULT="$PASS_ORIG1"
echo -n "Conta de Destino: "
read USER_ORIG2
PASSDEFAULT="$USER_ORIG2"
echo -n "Senha Destino: "
read PASS_ORIG2
PASSDEFAULT="$PASS_ORIG2"
imapsync --nolog --no-modulesversion --buffersize 8192000 --addheader --nosyncacls --subscribe --syncinternaldates --noauthmd5 --nofoldersizes --skipsize --errorsmax 100000 \
--host1 $HOST1 --user1 "$USER_ORIG1" --password1 "$PASS_ORIG1" \
--host2 $HOST2 --user2 "$USER_ORIG2" --password2 "$PASS_ORIG2"
echo "Finalizado $USER_ORIG2 $TIME_NOW" >> $LOGFILE
echo "" >> $LOGFILE
TIME_NOW=$(date +"%Y-%m-%d %T")
echo "" >> $LOGFILE
echo "IMAPSync Finalizado - $TIME_NOW" >> $LOGFILE
echo "------------------------------------" >> $LOGFILE
EMAIL
}
############################################################
#Começo do Script para notificar por e-mail
EMAIL() {
SUBJECT="IMAPSync Finalizado"
MESSAGE="'$SCRIPT_NAME' Finalizado"
#echo "IMAPSync Finalizado" | $MAIL -s "[$SCRIPT_NAME] Finalizado" $MAIL_RECIPIENT
echo "Subject: $SUBJECT
$MESSAGE" | "$MAIL" "$MAIL_RECIPIENT"
#rm -f $LOCK_FILE
#else
TIME_NOW=$(date +"%Y-%m-%d %T")
SUBJECT2="'$SCRIPT_NAME' !!AVISO!! ainda está em execução"
MESSAGE2="'$SCRIPT_NAME' em '$TIME_NOW' ainda está em execução"
#echo "$SCRIPT_NAME em $TIME_NOW ainda está em execução" | $MAIL -s "[$SCRIPT_NAME] !!AVISO!! ainda está em execução" $MAIL_RECIPIENT
echo "Subject: $SUBJECT2
$MESSAGE2" | "$MAIL" "$MAIL_RECIPIENT"
echo "$SCRIPT_NAME em $TIME_NOW ainda está em execução"
echo "[`date`] ==== Fim de rotina..."
#fi
echo
echo "Pressione <ENTER> para continuar..."
read msg
Principal
}
Principal