অজগর: টো, সিসি এবং বিসিসির সাথে কীভাবে মেল প্রেরণ করবেন?


106

বিভিন্ন বার্তাগুলি সহ কয়েক শতাধিক ইমেল বাক্সের পপুলেশন করার জন্য আমার পরীক্ষার উদ্দেশ্যে প্রয়োজন এবং এটির জন্য স্মার্টপ্লাইব ব্যবহার করতে যাচ্ছি। তবে অন্যান্য বিষয়ের মধ্যে আমার কেবল নির্দিষ্ট মেলবক্সগুলিতেই নয়, সিসি এবং বিসিসি সেগুলিও বার্তা প্রেরণে সক্ষম হতে হবে। ইমেল প্রেরণের সময় স্মার্টপ্লাইব সিসি- ইনিং এবং বিসিসি- আইএন সমর্থন করে বলে মনে হচ্ছে না ।

পাইথন স্ক্রিপ্ট থেকে কীভাবে সিসি বা বিসিসি বার্তা প্রেরণ করবেন সে সম্পর্কে পরামর্শ খুঁজছেন।

(এবং - না, আমি আমার পরীক্ষার পরিবেশের বাইরে কাউকে স্প্যাম করার জন্য কোনও স্ক্রিপ্ট তৈরি করছি না))

উত্তর:


153

ইমেল শিরোনামগুলি এসএমটিপি সার্ভারের কোনও বিষয় নয়। আপনি যখন আপনার ইমেলটি প্রেরণ করবেন তখন কেবলমাত্র টড্ডারে সিসি এবং বিসিসি প্রাপকদের যোগ করুন। সিসির জন্য, তাদের সিসি শিরোনামে যুক্ত করুন।

toaddr = 'buffy@sunnydale.k12.ca.us'
cc = ['alexander@sunydale.k12.ca.us','willow@sunnydale.k12.ca.us']
bcc = ['chairman@slayerscouncil.uk']
fromaddr = 'giles@sunnydale.k12.ca.us'
message_subject = "disturbance in sector 7"
message_text = "Three are dead in an attack in the sewers below sector 7."
message = "From: %s\r\n" % fromaddr
        + "To: %s\r\n" % toaddr
        + "CC: %s\r\n" % ",".join(cc)
        + "Subject: %s\r\n" % message_subject
        + "\r\n" 
        + message_text
toaddrs = [toaddr] + cc + bcc
server = smtplib.SMTP('smtp.sunnydale.k12.ca.us')
server.set_debuglevel(1)
server.sendmail(fromaddr, toaddrs, message)
server.quit()

smtplib.SMTP ঠিকানা হিসাবে তালিকা প্রেরণ করে না। কমপক্ষে পাইথন
২.7.২-

এই ক্ষেত্রে, আরসিসি 2822-এ উল্লিখিত বিসিসির শিরোনাম কোনও অর্থ দেয় না।
চেনসিওনগ কিউই

4
@ সাবজেক্ট'এর পরে একটি কোলন অনুপস্থিত
ব্যবহারকারী 891260

4
সিসি শিরোনামটি যোগ করবেন না। এটি দেখুন: mail.python.org/pipermail/email-sig/2004- সেপ্টেম্বার / 1000151.html এবং এটি: "" "লক্ষ্য করুন যে প্রেরণকারীকে প্রেরণের জন্য দ্বিতীয় যুক্তিটি একটি তালিকা হিসাবে পাস হয়েছে You আপনি অন্তর্ভুক্ত করতে পারেন পরিবর্তিতভাবে তাদের প্রত্যেককে বার্তা পৌঁছে দেওয়ার জন্য তালিকার যে কোনও সংখ্যক ঠিকানা রয়েছে Since যেহেতু খামের তথ্য বার্তা শিরোনাম থেকে পৃথক, আপনি এমনকি বিসিসি কাউকে পদ্ধতির যুক্তিতে অন্তর্ভুক্ত করেও মেসেজ শিরোনামে নয় can " "" pymotw.com/2/smtplib
লিওনার্দো আন্দ্রেড

4
এটি কখনই বিসিসি বা সিসি করবে না - এটি সর্বদা হয়ে উঠবে
সমৃদ্ধশাহী

37

মূল বিষয়টি হ'ল প্রেরকগণকে আপনার প্রেরণমুল কলটিতে ইমেল আইডির তালিকা হিসাবে যুক্ত করা ।

import smtplib
from email.mime.multipart import MIMEMultipart

me = "user63503@gmail.com"
to = "someone@gmail.com"
cc = "anotherperson@gmail.com,someone@yahoo.com"
bcc = "bccperson1@gmail.com,bccperson2@yahoo.com"

rcpt = cc.split(",") + bcc.split(",") + [to]
msg = MIMEMultipart('alternative')
msg['Subject'] = "my subject"
msg['To'] = to
msg['Cc'] = cc
msg.attach(my_msg_body)
server = smtplib.SMTP("localhost") # or your smtp server
server.sendmail(me, rcpt, msg.as_string())
server.quit()

4
ছেড়ে দিন msg['BCC']- এটি আপনার লুকানো প্রেরককে প্রকাশ করে এবং তাদের কাছে বার্তাটি প্রেরণ করা হয় বা না (এগুলি করার পক্ষে যুক্তি sendmail) এর কোনও প্রভাব নেই ।
এরিকা কেন

4
আমি এরিকা এবং জুলিওর সাথে একমত সিসির উদ্দেশ্য হ'ল অন্যান্য প্রাপকদের কাছে রিসিভারটি লুকানো। যদি এটি বার্তায় থাকে তবে এটি উদ্দেশ্যকে পরাস্ত করে।
টিমোথি সি। কুইন

21

২০১১ সালের নভেম্বরে প্রকাশিত পাইথন ৩.২ অনুসারে, এসএমটিপ্লিবের ন্যায়বিচারের send_messageপরিবর্তে একটি নতুন ফাংশন রয়েছে sendmailযা টু / সিসি / বিসিসিয়ের সাথে কাজ করা সহজ করে তোলে। পাইথনের অফিসিয়াল ইমেল উদাহরণগুলি থেকে কিছুটা সামান্য পরিবর্তন নিয়ে আসা, আমরা পাই:

# Import smtplib for the actual sending function
import smtplib

# Import the email modules we'll need
from email.message import EmailMessage

# Open the plain text file whose name is in textfile for reading.
with open(textfile) as fp:
    # Create a text/plain message
    msg = EmailMessage()
    msg.set_content(fp.read())

# me == the sender's email address
# you == the recipient's email address
# them == the cc's email address
# they == the bcc's email address
msg['Subject'] = 'The contents of %s' % textfile
msg['From'] = me
msg['To'] = you
msg['Cc'] = them
msg['Bcc'] = they


# Send the message via our own SMTP server.
s = smtplib.SMTP('localhost')
s.send_message(msg)
s.quit()

শিরোনামগুলি দুর্দান্তভাবে কাজ করে, কারণ প্রেরণ_মেসেজ বিসিসিকে ডকুমেন্টেশনে বর্ণিত হিসাবে শ্রদ্ধা করে :

সেন্ড_মেসেজটি কোনও বিসিসি বা রিসেন্ট-বিসিসি শিরোনামকে প্রেরণ করে না যা ছবিতে প্রদর্শিত হতে পারে


সঙ্গে sendmailএটিকে আরো সিসি হেডার যোগ করার জন্য সাধারণ বিষয় ছিল, যেমন কিছু কাজ:

msg['Bcc'] = blind.email@adrress.com

বা

msg = "From: from.email@address.com" +
      "To: to.email@adress.com" +
      "BCC: hidden.email@address.com" +
      "Subject: You've got mail!" +
      "This is the message body"

সমস্যাটি হ'ল, সেন্ডমেল ফাংশনটি সেই সমস্ত শিরোনামের সাথে একই আচরণ করে, যার অর্থ তারা বিসিসির উদ্দেশ্যগুলি পরাস্ত করে সমস্ত টু: এবং বিসিসি: ব্যবহারকারীদের কাছে প্রেরণ করা হবে (দৃশ্যমান)। সমাধান, এখানে অন্যান্য উত্তরের অনেকগুলি হিসাবে দেখানো হয়েছে, হ'ল বিসিসিকে শিরোলেখগুলিতে অন্তর্ভুক্ত করা হয়নি, এবং কেবলমাত্র ইমেলগুলির তালিকায় কেবল পাস করা হয়েছে sendmail

সাবধানবাণীতে এর send_messageজন্য একটি বার্তা অবজেক্টের প্রয়োজন, যার অর্থ আপনাকে email.messageকেবল স্ট্রিংগুলিতে প্রবেশের পরিবর্তে একটি শ্রেণি আমদানি করতে হবে sendmail


4
এইমাত্র যাচাই করা হয়েছে যে সেন্ড_মেসেজ (msg) ইমেলমেসেজটিতে সিসি যুক্ত করে - হ্যান্ডেল করে - # ['সিসি'] আপনি যদি পাইথন 3 ব্যবহার করেন তবে এটি যাওয়ার উপায়।
বিমিলার

@ বিমিলার ইয়ুপ, বেশ সহজ আমি এই উত্তরটি লিখেছিলাম কারণ আমি এটি খতিয়ে দেখছিলাম এবং ডক্স এবং অন্যান্য রেফগুলিতে সহজতর উপায়টি খুঁজে পেয়েছিলাম এবং এটি আমার পক্ষে ভালভাবে কাজ করেছে, এবং আমি ভেবেছিলাম যে এটি এখানে একটি স্থানের জন্য উপযুক্ত কারণ অনেক লোক এখানে 1 ম দেখাবে।

আমি কেবল এই সমাধানটিকে আরও মার্জিত মনে করি না তবে এটি পুরোপুরি কার্যকর হয়। এটি @AbentSpoon- এর উত্তর সহ আমার একটি সমস্যাও সমাধান করেছে, এটি হ'ল সিসিতে জিমেইল অ্যাড্রেসগুলির জন্য, ইমেলগুলি ইনবক্সে যাচ্ছিল না তবে পরিবর্তে তিনি "সমস্ত মেল" দিয়েছিলেন।
গিলিয়াম গ্যারিগোস

19

সিসি শিরোনামটি যোগ করবেন না।

এটি দেখুন: http://mail.python.org/pipermail/email-sig/2004- সেপ্টেম্বর / 000151.html

এবং এটি: "" "লক্ষ্য করুন যে প্রেরণকারীকে প্রেরণকারীর (), - এর দ্বিতীয় তর্কটি একটি তালিকা হিসাবে পাস হয়েছে You আপনি প্রতিটি বার্তাকে পাল্টে দেওয়ার জন্য তালিকায় কোনও সংখ্যক ঠিকানা অন্তর্ভুক্ত করতে পারেন Since খাম থেকে বার্তা শিরোনাম থেকে তথ্য পৃথক, আপনি এমনকি বিসিসিকে কাউকে পদ্ধতি যুক্তিতে অন্তর্ভুক্ত করেও বার্তা শিরোনামে না করে রাখতে পারেন http:// "" " http://pymotw.com/2/smtplib থেকে

toaddr = 'buffy@sunnydale.k12.ca.us'
cc = ['alexander@sunydale.k12.ca.us','willow@sunnydale.k12.ca.us']
bcc = ['chairman@slayerscouncil.uk']
fromaddr = 'giles@sunnydale.k12.ca.us'
message_subject = "disturbance in sector 7"
message_text = "Three are dead in an attack in the sewers below sector 7."
message = "From: %s\r\n" % fromaddr
    + "To: %s\r\n" % toaddr
    + "CC: %s\r\n" % ",".join(cc)
    # don't add this, otherwise "to and cc" receivers will know who are the bcc receivers
    # + "BCC: %s\r\n" % ",".join(bcc)
    + "Subject: %s\r\n" % message_subject
    + "\r\n" 
    + message_text
toaddrs = [toaddr] + cc + bcc
server = smtplib.SMTP('smtp.sunnydale.k12.ca.us')
server.set_debuglevel(1)
server.sendmail(fromaddr, toaddrs, message)
server.quit()

উজ্জ্বলতার জন্য থাম্বস আপ: ডি
ক্রিস

18

টো, সিসি এবং বিসিসির মধ্যে পার্থক্য কেবলমাত্র পাঠ্য শিরোনামে ঘটে। এসএমটিপি স্তরে, প্রত্যেকেই প্রাপক।

TO - এখানে একটি TO আছে: এই প্রাপকের ঠিকানা সহ শিরোনাম

সিসি - একটি সিসি রয়েছে: এই প্রাপকের ঠিকানা সহ শিরোনাম

বিসিসি - এই প্রাপকের মোটেও শিরোনামে উল্লেখ করা হয়নি, তবে এখনও প্রাপক।

যদি তোমার থাকে

TO: abc@company.com
CC: xyz@company.com
BCC: boss@company.com

আপনার তিনজন প্রাপক রয়েছে। ইমেল বডিটিতে শিরোনামগুলি কেবল TO: এবং সিসি অন্তর্ভুক্ত করবে:


17

আপনি MIMEText চেষ্টা করতে পারেন

msg = MIMEText('text')
msg['to'] = 
msg['cc'] = 

তারপরে ছবি প্রেরণ করুন।

https://docs.python.org/3.6/library/email.example.html


4
উদাহরণটি সিসি ব্যবহার করে না
hoju

4
আমি সম্মত হই যে উপরের লিঙ্কের উদাহরণগুলি সিসিটি ব্যবহার করে না। @ হুজু সম্ভবত এটিই বোঝাতে চেয়েছিল।
শৈলেন

5

আমি তৈরি না করা পর্যন্ত এটি আমার পক্ষে কাজ করে নি:

#created cc string
cc = ""someone@domain.com;
#added cc to header
msg['Cc'] = cc

এবং প্রাপকগুলিতে সিসি যোগ করা [তালিকা] এর মতো:

s.sendmail(me, [you,cc], msg.as_string())

3

'টু' এবং 'সিসি' উভয় ক্ষেত্রে আমার একাধিক প্রাপক ছিল বলে উপরের জিনিসগুলির কোনওটিই আমার পক্ষে কাজ করেনি। সুতরাং আমি নীচের মত চেষ্টা করেছি:

recipients = ['abc@gmail.com', 'xyz@gmail.com']
cc_recipients = ['lmn@gmail.com', 'pqr@gmail.com']
MESSAGE['To'] = ", ".join(recipients)
MESSAGE['Cc'] = ", ".join(cc_recipients)

এবং 'সিসি_রেসিপিয়েন্টস' দিয়ে 'প্রাপকদের' প্রসারিত করুন এবং তুচ্ছ পদ্ধতিতে মেল প্রেরণ করুন

recipients.extend(cc_recipients)
server.sendmail(FROM,recipients,MESSAGE.as_string())
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.