Khi bạn sử dụng sp_send_dbmail
thủ tục được lưu trữ để gửi email trong SQL Server, bạn thường sẽ bao gồm @profile_name
đối số để chỉ định cấu hình nào sẽ sử dụng.
Tuy nhiên, nếu bạn bỏ qua đối số này, sp_send_dbmail
sẽ sử dụng hồ sơ riêng tư mặc định cho người dùng hiện tại. Nếu người dùng không có hồ sơ riêng tư mặc định, sp_send_dbmail
sẽ sử dụng hồ sơ công khai mặc định cho msdb
cơ sở dữ liệu.
Nếu không có cái nào trong số này được định cấu hình, bạn sẽ gặp lỗi sau:
Msg 14636, Level 16, State 1, Procedure msdb.dbo.sp_send_dbmail, Line 112 No global profile is configured. Specify a profile name in the @profile_name parameter.
Nếu bạn gặp phải lỗi này, về cơ bản bạn có ba tùy chọn:
- Chỉ định cấu hình nào sẽ sử dụng, bằng cách bao gồm
@profile_name
đối số khi gọisp_send_dbmail
thủ tục. - Tạo hồ sơ riêng tư mặc định cho người dùng hiện tại.
- Tạo tiểu sử công khai cho
msdb
cơ sở dữ liệu.
Bài viết này cung cấp một ví dụ về tùy chọn thứ ba:tạo hồ sơ công khai cho msdb
cơ sở dữ liệu.
Ví dụ
Dưới đây là ví dụ về quy trình tạo hồ sơ Thư cơ sở dữ liệu, tạo tài khoản Thư cơ sở dữ liệu, thêm tài khoản vào hồ sơ, sau đó cấp quyền truy cập công khai vào hồ sơ đó.
-- Create a Database Mail profile
EXECUTE msdb.dbo.sysmail_add_profile_sp
@profile_name = 'DB Public Profile',
@description = 'Public Profile for emails.';
-- Create a Database Mail account
EXECUTE msdb.dbo.sysmail_add_account_sp
@account_id = 1,
@account_name = 'DB Public',
@description = 'Public account for emails.',
@email_address = '[email protected]',
@replyto_address = '[email protected]',
@display_name = 'DB Public Mailer',
@mailserver_name = 'smtp.example',
@port = 587;
-- Add the account to the profile
EXECUTE msdb.dbo.sysmail_add_profileaccount_sp
@profile_name = 'DB Public Profile',
@account_name = 'DB Public',
@sequence_number = 1;
-- Grant the public principal access to the profile
EXECUTE msdb.dbo.sysmail_add_principalprofile_sp
@profile_name = 'DB Public Profile',
@principal_name = 'public',
@is_default = 1;
Dòng cuối cùng thực sự là phần làm cho nó trở thành hồ sơ công khai mặc định.
Bằng cách sử dụng @is_default = 1
, Tôi đang đặt hồ sơ này thành hồ sơ công khai mặc định. Nếu tôi đã sử dụng @is_default = 0
thay vào đó, nó sẽ không phải là hồ sơ công khai mặc định.
Để đặt hồ sơ ở chế độ công khai, hãy chỉ định @principal_id
trong tổng số 0
hoặc @principal_name
trong tổng số public
. Hồ sơ công khai có sẵn cho tất cả người dùng trong msdb
cơ sở dữ liệu (mặc dù người dùng cũng phải là thành viên của DatabaseMailUserRole
để thực thi sp_send_dbmail
).
Lưu ý rằng chỉ có thể có một hồ sơ công khai mặc định.
Cập nhật cấu hình hiện có
Nếu bạn đã có hồ sơ công khai, nhưng đó không phải là hồ sơ công khai mặc định, bạn có thể sử dụng sysmail_update_principalprofile_sp
để thay đổi điều đó.
Ví dụ:
EXECUTE msdb.dbo.sysmail_update_principalprofile_sp
@profile_name = 'DB Public Profile',
@principal_name = 'public',
@is_default = 1;