/*auto readmore*/ /*auto readmore*/ /* an hien script*/ // an hien password /*an hien ma chuong trinh cong tru */ /*Scrollbox thanh cuon*/ /***Nhung CODE***/ /* dòng xanh dòng trắng */ /* https://cdnjs.com/libraries/prism lay thu vien, can vao ten file ma goi 1. copy link vao vi du:prism-python.min.js 2. ten ngon nua la python */ /*=== New posts ===*/ /*header slider*/ /*=== bai viet lien quan===*/ /*===tabcode===*/
Showing posts with label Smtp. Show all posts
Showing posts with label Smtp. Show all posts

[Database-Tự Học Quản Trị SQL Server] SOA101 - LAB6 - GIÁM SÁT, CẢNH BÁO, THÔNG BÁO ĐẾN EMAIL

Nên xem cấu hình SMTP trước khi xem bài này

MỤC TIÊU:
Kết thúc bài thực hành này bạn có thể biết cách:
  • Xem SQL Server Error Log
  • Cấu hình Database mail
  • Cấu hình SQL Server Agent Operators
  • Cấu hình SQL Server Agent Alerts

YÊU CẦU:
BÀI 1
Thực hiện xem log lỗi của SQL Server và kiểm tra nơi lưu trữ các file log hiện tại trên hệ thống SQL 

BÀI 2
Tạo profile và cấu hình account email và thực hiện gửi mail test

BÀI 3
Tạo mới SQL Server Agent Operators và thực hiện jobs backup full cho CSDL AdventureWorks2019, sau khi backup hoàn thành hệ thống tự động gửi thông báo đến email DBA.

BÀI 4
Tạo mới SQL Server Agent Alerts để tự động gửi cảnh cáo nếu transaction log bị đầy (mã lỗi 9002) đến email DBA


THỰC HIỆN:

BÀI 1
Thực hiện xem log lỗi của SQL Server và kiểm tra nơi lưu trữ các file log hiện tại trên hệ thống SQL 

Xem SQL Server Error Log
Tại SSMS, ở cửa sổ Object explorer, Chọn Management, chọn SQL Server Logs, phải chuột vào Current chọn View SQL Server Log.


Tại cửa sổ Log File Viewer, check vào SQL Server, SQL Server Agent để xem thông tin các log đã được ghi nhận

a. File log hiện tại của SQL Server

b. File log của hiện tại SQL Server Agent

c. Khởi tạo lại log của SQL Server
Thực hiện lệnh (new query – execute): EXEC sys.sp_cycle_errorlog;


BÀI 2
Tạo profile và cấu hình account email và thực hiện gửi mail test

Cấu hình Database mail
a. Tạo database mail
Tại SSMS, ở cửa sổ Object explorer, Chọn Management, phải chuột phải vào Database Mail > chọn Configure Database Mail màn hình Welcome ấn Next


tại màn hình Select Configuration Task chọn option Set up Database Mail > ấn next


Tại màn hình New Profile nhấn Add để thêm account


Điền thông tin SMTP server bạn > nhấn OK


Outgoing Mail Server (SMTP)

AMTP Authentication

 

E-mail address:

Basic authentication

Reply e-mail:

User name:

Server name:

Password:

Port number:

Confirm password:



Nhấn next


Tại màn hình Manage Profile Security chọn tab public profile, trong phần Default Profile chọn Yes ấn > next.


Nhấn Next



nhấn Finish


Nhấn Close để hoàn thành cài đặt


b. Kích hoạt Database Mail XPS

sp_configure 'show advanced options', 1;  
GO  
RECONFIGURE;  
GO  
sp_configure 'Database Mail XPs', 1;  
GO  
RECONFIGURE  
GO 
Tham khảo cách cấu hình email tại đây

c. Gửi mail test và xem log

Chọn Management, phải chuột vào Database Mail chọn Send Test E-mail..
Trong phần To: nhập vào địa chỉ mail muốn nhận ấn Send Test E-Mail



Nhấn OK để gửi mail
Database Mail > View Database Mail Log

Log ghi nhận trên hệ thống


Kiểm tra đã nhập được email

BÀI 3
Tạo mới SQL Server Agent Operators và thực hiện jobs backup full cho CSDL AdventureWorks2019, sau khi backup hoàn thành hệ thống tự động gửi thông báo đến email DBA.

Cấu hình SQL Server Agent Operators
Start SQL Server Agent


a. Chuẩn bị
Server Objects > Backup Devices > New Backup Deivce > đặt tên AW_Backup_Full > đường dẫn lưu trữ file



Management > Maintenance Plans > Maintence Plan Wizard > đặt tên Lab SQL Server Agent

Tab General > Database(s)
Tab Destination > Add > AW_Backup_Full


b. Enable SQL Server Agent mail profile

SQL Server Agent > Properties > Chọn Alert System > Enable Mail profile > OK > Restart SQL Server Agent



c. Tạo Operator
SQL Server Agent, phải chuột phải vào Operators > New Operator…
Name: Admin-SQL, 
Email name: địa chỉ mail muốn nhận thông báo  > OK



d. Cấu hình job gửi notify đến Operator
Chọn tên Lab SQL Server Agent.Subplan_1 (là tên đã làm ở phần chuẩn bị) > Properties > Notifications > Email chọn Admin-SQL(là operator đã tạo bước trên) > hành động muốn gửi thông báo Ví dụ: When the job completes > OK


e. Test và kiểm tra kết quả
Chọn Lab SQL Server Agent.Subplan_1 > Start Job at Step…


Chọn SQL Server Agent > Operations > Admin-SQL > Properties > History


Kiểm tra email đã nhận được thông báo.


BÀI 4
Tạo mới SQL Server Agent Alerts để tự động gửi cảnh cáo nếu transaction log bị đầy (mã lỗi 9002) đến email DBA

Cấu hình SQL Server Agent Alerts
a. Tạo Alert
SQL Server Agent > New Alert... > đặt tên > điền mã lỗi. Ví dụ: 9002



Respone > chọn Notify Operators > chọn E-mail Options >  chọn E-mail > OK

b. Test và kiểm tra kết quả
Tạo mới Database, giới hạng dung lượng file 20MB và mới bảng dữ liệu



Thực hiện chèn dữ liệu vào bảng (mục đích tạo ra lỗi 9002)

Code:
-- test alert 9002 đầy log
USE master;
GO
CREATE DATABASE TestAlertDB -- tạo database
ON (
	NAME = TestAlertDB
	, FILENAME = 'd:\Data\TestAlertDB.mdf' 
	, MAXSIZE = 20MB)
LOG ON (
	NAME = TestAlertDB_log
	, FILENAME = 'd:\Data\TestAlertDB_log.ldf'
	, MAXSIZE = 20MB) ; -- giới hạng dung lượng 20MB
GO
-- tạo mới bảng dữ liệu
USE TestAlertDB;
CREATE TABLE testtable (col1 text);

-- chèn dữ liệu để test
USE TestAlertDB;
GO
SET NOCOUNT ON;
WHILE 1 = 1
	BEGIN
		INSERT INTO testtable (col1)
		VALUES('Test data!');
	END;
GO

Vào SQL Server Agent > Alerts > Test Full Transaction Log > Properties > History




Xong!

Hướng Dẫn Enable POP Gmail & Cấu Hình/Sử Dụng SMTP Client Gửi Mail

YÊU CẦU
  1. Bật/Enable POP Server
  2. Bật chế độ xác thực 2 lớp
  3. Tạo mật khẩu ứng dụng
  4. Cấu hình trên Ms Outlook
  5. Cấu hình trên SQL Server 
  6. Gửi email bằng python

THỰC HIỆN

1. Enable POP Server

Đăng nhập Gmail > Settings > See All Settings > Forwarding and POP/IMAP > chọn Enable POP for all maill > Save changes



2. Bật chế độ xác thực 2 lớp

Chọn Manage your Google Acount > Security > 2-Step Verification > Get Started > Continue



Nhập số điện thoại càn nhận mã xác minh (7) > Send > nhập mã xác minh (9) nhận từ số điện thoại ở bước 7 > Next > nhấn Turn On



3. Tạo mật khẩu ứng dụng
Chọn App passwords > Other (Custom name) > điền vào tên cần đặt > Generate (để tạo password) > Done



Sau khi hoàn thành bước này chúng ta có thể sử dụng thông tin SMTP như bên dưới:
Incoming mail server: pop.gmail.com
Outgoing mail server (SMTP): smtp.gmail.com
Incoming server (POP3): 995; SSL
Outgoing server (SMTP): 587; TLS
Hoặc Outgoing server (SMTP): 465; SSL

4. Cấu hình trên Ms Outlook





5. Cấu hình trên SQL Server


6. Gửi email bằng python 
Tham khảo tại đây

Xong!

Network Automation #012 - SMTP Sending Emails With Attachment in Python - Gửi Mail Đính Kèm File Bằng Python

YÊU CẦU:

1. Sử dụng thư viện email smtplib của python để kết nối đến gmail để gửi mail đính kèm attach file

2. Gửi mail hàng loạt, đính kèm attach file với thông tin được lưu trữ trong file email_list.csv

3. Sử dụng profile hiện của MS Outlook để gửi mail.


THỰC HIỆN

1. Sử dụng thư viện email smtplib của python để kết nối đến gmail để gửi mail đính kèm attach file

Code:

'''
Kết nối đến Gmail để gửi mail và đính kèm attach file

Điều kiện:
1. Tắt bảo mật 2 lớp
https://myaccount.google.com/security?utm_source=OGB&utm_medium=act#signin

2. Allow less secure apps: ON
https://myaccount.google.com/u/1/lesssecureapps?pli=1&pageId=none

nếu không chúng ta sẽ gặp lỗi
#smtplib.SMTPAuthenticationError: (535, b'5.7.8 Username and Password not accepted. Learn more at\n5.7.8  https://support.google.com/mail/?p=BadCredentials qe12sm2115875pjb.29 - gsmtp')

Link tham khảo
https://realpython.com/python-send-email/
'''
import email, smtplib, ssl
from email import encoders
from email.mime.base import MIMEBase
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText

def send_mail_att(mail_from, mail_password, mail_to, mail_subject, mail_body, att_file): # Hàm gửi mail
	port = 465  # For SSL
	smtp_server = "smtp.gmail.com"
	# Create a multipart message and set headers
	message = MIMEMultipart()
	message["From"] = mail_from
	message["To"] = mail_to
	message["Subject"] = mail_subject
	#message["Bcc"] = "khanhvc2003@yahoo.com"

	# Add body to email
	message.attach(MIMEText(mail_body, "plain"))

	# Open file in binary mode
	with open(att_file, "rb") as attachment:
	    # Add file as application/octet-stream
	    # Email client can usually download this automatically as attachment
	    part = MIMEBase("application", "octet-stream")
	    part.set_payload(attachment.read())

	# Encode file in ASCII characters to send by email    
	encoders.encode_base64(part)

	# Add header as key/value pair to attachment part
	part.add_header("Content-Disposition", f"attachment; filename = {att_file}")

	# Add attachment to message and convert message to string
	message.attach(part)
	text = message.as_string()

	# Log in to server using secure context and send email
	context = ssl.create_default_context()
	try:
		with smtplib.SMTP_SSL(smtp_server, port, context = context) as server:
		    server.login(mail_from, mail_password)
		    server.sendmail(mail_from, mail_to, text)
		    print (f"Successfuly sent to '{mail_to}'")
	except:
		print (f"Communication failure in '{smtp_server}'")

email_info = {
	"mail_from": "khanhvc.wrk@gmail.com",
	"mail_password": "matkhaucuaban" ,
	"mail_to": "khanhvc@hansollvina.com",
	"mail_subject" : "This is for testing 8.19 r duong dan BO PHAY" ,
	"mail_body": "This is for testing email",
	"att_file": r"C:\python\Blog\TextFSM Custom.JPG"
	#pass_mail = input("Type your password and press enter:")
}
send_mail_att(**email_info)


2. Gửi mail hàng loạt, đính kèm attach file với thông tin được lưu trữ trong file email_list.csv

Tạo file email_list.csv có dạng:



Code:
'''
Kết nối đến Gmail để gửi mail và đính kèm attach file, danh sách các địa chỉ email được lưu trong file

Điều kiện:
1. Tắt bảo mật 2 lớp
https://myaccount.google.com/security?utm_source=OGB&utm_medium=act#signin

2. Allow less secure apps: ON
https://myaccount.google.com/u/1/lesssecureapps?pli=1&pageId=none

nếu không chúng ta sẽ gặp lỗi
#smtplib.SMTPAuthenticationError: (535, b'5.7.8 Username and Password not accepted. Learn more at\n5.7.8  https://support.google.com/mail/?p=BadCredentials qe12sm2115875pjb.29 - gsmtp')

Link tham khảo
https://realpython.com/python-send-email/
'''
import email, smtplib, ssl
from email import encoders
from email.mime.base import MIMEBase
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText

import pandas as pd
from datetime import datetime
import os

path = os.getcwd()  # lấy đường dẫn hiện tại
now = datetime.now().strftime("%Y-%b-%d_%H%M%S")

ERR_log = f"Send_Mail_{now}_ERR_logs.log" # định nghĩa tên file lưu trữ thông tin lỗi

def send_mail_att(mail_from, mail_password, mail_to, mail_subject, mail_body, att_file): # Hàm gửi mail
	port = 465  # For SSL
	smtp_server = "smtp.gmail.com"
	# Create a multipart message and set headers
	message = MIMEMultipart()
	message["From"] = mail_from
	message["To"] = mail_to
	message["Subject"] = mail_subject
	#message["Bcc"] = "khanhvc2003@yahoo.com"

	# Add body to email
	message.attach(MIMEText(mail_body, "plain"))

	# Open file in binary mode
	with open(att_file, "rb") as attachment:
	    # Add file as application/octet-stream
	    # Email client can usually download this automatically as attachment
	    part = MIMEBase("application", "octet-stream")
	    part.set_payload(attachment.read())

	# Encode file in ASCII characters to send by email    
	encoders.encode_base64(part)

	# Add header as key/value pair to attachment part
	part.add_header("Content-Disposition", f"attachment; filename = {att_file}")

	# Add attachment to message and convert message to string
	message.attach(part)
	text = message.as_string()

	# Log in to server using secure context and send email
	context = ssl.create_default_context()
	try:
		with smtplib.SMTP_SSL(smtp_server, port, context = context) as server:
		    server.login(mail_from, mail_password)
		    server.sendmail(mail_from, mail_to, text)
		    print (f"Successfuly sent to '{mail_to}'")
	except:
		f = open(ERR_log,"a")
		f.write(f'Undelivered email to: {mail_to}')
		f.write("\n")
		f.close()
		print (f"Communication failure in '{smtp_server}'")
		pass

att_file = r"C:\python\Blog\TextFSM Custom.JPG" # tên file cần đính kèm

email_list = 'email_list.csv' # tên file lưu trữ thông tin thiết bị
column_name = ['mail_from', 'mail_subject', 'mail_to', 'mail_body', 'mail_password'] # chỉ định các cột cần lấy
try:
	email_list = pd.read_csv(email_list, usecols = column_name, encoding = "utf-8") # đọc và xử lý chuyển dữ liệu về dạng DataFrame, và sử dụng code utf-8
	email_list = email_list.to_dict(orient='records') # chuyển đổi về dict tương ứng (ví dụ: nếu file có 10 dòng thì sẽ tạo ra 9 (10 dòng bỏ đi dòng đầu tiên đã làm key) dictionary tương ứng)
	#pprint(email_list)

	for email_info in email_list:
		email_info["att_file"] = att_file # thêm thông tin att_file vào dict
		send_mail_att(**email_info)
	ERR_info = f"*** ERROR: Please check file : '{ERR_log}' at '{path}' ***\n"
	print (ERR_info)
except:
	ERR_info = f"*** ERROR: Please check file : '{email_list}' at '{path}' ***\n"
	print (ERR_info)
	pass


3. Sử dụng profile hiện của MS Outlook để gửi mail.
import win32com.client
def outlook_send_mail(mail_to, mail_subject, mail_body, att_file):
	"""
 	gọi outlook hiện tại để send mail
	"""
	outlook = win32com.client.Dispatch('outlook.application')
	mail = outlook.CreateItem(0)
	mail.To = rf"{mail_to}"
	mail.Subject = rf"{mail_subject}"
	mail.HTMLBody = '

This is HTML Body

' mail.Body = rf"{mail_body}" mail.Attachments.Add(rf"{att_file}") # mail.Attachments.Add('them file nua.abc') # mail.CC = 'somebody@company.com' mail.Send()


Tham khảo bài gửi mail KHÔNG attach file tại đây.


Xong!

Network Automation #011 - SMTP Sending Emails With Python - Gửi Mail Bằng Python

 YÊU CẦU:

1. Sử dụng thư viện smtplib của python để kết nối đến gmail và gửi mail

2. Gửi mail hàng loạt với thông tin được lưu trữ trong file email_list.csv


THỰC HIỆN

1. Sử dụng thư viện smtplib của python để kết nối đến gmail và gửi mail

Code:
'''
Kết nối đến Gmail để gửi mail

Điều kiện:
1. Tắt bảo mật 2 lớp
https://myaccount.google.com/security?utm_source=OGB&utm_medium=act#signin

2. Allow less secure apps: ON
https://myaccount.google.com/u/1/lesssecureapps?pli=1&pageId=none

nếu không chúng ta sẽ gặp lỗi
#smtplib.SMTPAuthenticationError: (535, b'5.7.8 Username and Password not accepted. Learn more at\n5.7.8  https://support.google.com/mail/?p=BadCredentials qe12sm2115875pjb.29 - gsmtp')

nếu trong nội dung email có gõ tiếng việt sẽ bị lỗi, các địa chỉ không gửi đến được sẽ được lưu vào file
'''
import smtplib, ssl

def send_mail(mail_from, mail_password, mail_to, mail_subject, mail_body): # Hàm gửi mail
	port = 465  # For SSL
	smtp_server = "smtp.gmail.com"
	#mail_password = input("Type your password and press enter: ")
	mail_message = f"Subject: {mail_subject}\n\n{mail_body}"
	context = ssl.create_default_context()
	try:
		with smtplib.SMTP_SSL(smtp_server, port, context = context) as server:
		    server.login(mail_from, mail_password)
		    server.sendmail(mail_from, mail_to, mail_message)
		    print (f"Successfuly sent to '{mail_to}'")
	except:
		print (f"Communication failure in '{smtp_server}'")
            
# Định nghĩa các thông tin 
email_info = {
	"mail_from": "khanhvc.wrk@gmail.com",
	"mail_password": "admin" ,
	"mail_to": "khanhvc@tencongty.com",
	"mail_subject" : "This is send python 3.10" ,
	"mail_body": "This is for testing email",
	#mail_password = input("Type your password and press enter:")
}

send_mail(**email_info)

2. Gửi mail hàng loạt với thông tin được lưu trữ trong file email_list.csv

Tạo file email_list.csv có dạng:


Code:
'''
Kết nối đến Gmail để gửi mail, danh sách các email được lưu trữ trong file email_list.csv

Điều kiện:
1. Tắt bảo mật 2 lớp
https://myaccount.google.com/security?utm_source=OGB&utm_medium=act#signin

2. Allow less secure apps: ON
https://myaccount.google.com/u/1/lesssecureapps?pli=1&pageId=none

nếu không chúng ta sẽ gặp lỗi
#smtplib.SMTPAuthenticationError: (535, b'5.7.8 Username and Password not accepted. Learn more at\n5.7.8  https://support.google.com/mail/?p=BadCredentials qe12sm2115875pjb.29 - gsmtp')
'''
import smtplib, ssl
import pandas as pd
from pprint import pprint
from datetime import datetime
import os

path = os.getcwd()  # lấy đường dẫn hiện tại
now = datetime.now().strftime("%Y-%b-%d_%H%M%S")

ERR_log = f"Send_Mail_{now}_ERR_logs.log" # định nghĩa tên file lưu trữ thông tin lỗi

def send_mail(mail_from, mail_password, mail_to, mail_subject, mail_body):
	port = 465  # For SSL
	smtp_server = "smtp.gmail.com"
	#mail_password = input("Type your password and press enter: ")
	mail_message = f"Subject: {mail_subject}\n\n{mail_body}"
	context = ssl.create_default_context()
	try:
		with smtplib.SMTP_SSL(smtp_server, port, context = context) as server:
		    server.login(mail_from, mail_password)
		    server.sendmail(mail_from, mail_to, mail_message)
		    print (f"Successfuly sent to '{mail_to}'")
	except:
		f = open(ERR_log,"a")
		f.write(f'Undelivered email to: {mail_to}')
		f.write("\n")
		f.close()
		print (f"Communication failure in '{smtp_server}'")
		pass
            
email_list = 'email_list.csv' # tên file lưu trữ thông tin thiết bị
column_name = ['mail_from', 'mail_subject', 'mail_to', 'mail_body', 'mail_password'] # chỉ định các cột cần lấy
try:
	email_list = pd.read_csv(email_list, usecols = column_name, encoding = "utf-8") # đọc và xử lý chuyển dữ liệu về dạng DataFrame, và sử dụng code utf-8
	email_list = email_list.to_dict(orient='records') # chuyển đổi về dict tương ứng (ví dụ: nếu file có 10 dòng thì sẽ tạo ra 9 (10 dòng bỏ đi dòng đầu tiên đã làm key) dictionary tương ứng)
	#pprint(email_list)

	for email_info in email_list:
		send_mail(**email_info)
	ERR_info = f"*** ERROR: Please check file : '{ERR_log}' at '{path}' ***\n"
	print (ERR_info)
except:
	ERR_info = f"*** ERROR: Please check file : '{email_list}' at '{path}' ***\n"
	print (ERR_info)
	pass

Kết quả:


Tham khảo bài gửi mail có đính kèm attach file tại đây


Xong!


/*header slide*/