发送包含以下收据的电子邮件时 to:personA cc:personB 密送:personC
这三个人都会收到电子邮件。所有收到的电子邮件都会在收据字段中显示personC。我们知道不应该显示bcc联系人personC。为什么会这样?我正确地将CTCoreMessage
设置为to,cc和bcc。这是MailCore
框架的错误吗?或者有什么我错过了吗?
提前致谢!
以下是供您参考的相关代码
- (IBAction)buttonSendPressed:(id)sender
{
[self dismissViewControllerAnimated:YES completion:^{
CTCoreMessage *testMsg = [[CTCoreMessage alloc] init];
NSMutableArray *mutArrTos = [NSMutableArray array]; // personA
NSMutableArray *mutArrCcs = [NSMutableArray array]; // personB
NSMutableArray *mutArrBccs = [NSMutableArray array]; // personC
NSLog(@"toContactArr :%@",toContactArr);
if (toContactArr.count>0) {
for (NSDictionary *dict in toContactArr) {
[mutArrTos addObject:[CTCoreAddress addressWithName:[dict valueForKey:@"name"] email:[dict valueForKey:@"email"]]];
}
NSLog(@"mutArrRecipients : %@", mutArrTos);
[testMsg setTo:[NSSet setWithArray:mutArrTos]];
}
if (ccContactArr.count>0) {
for (NSDictionary *dict in ccContactArr) {
[mutArrCcs addObject:[CTCoreAddress addressWithName:[dict valueForKey:@"name"] email:[dict valueForKey:@"email"]]];
}
NSLog(@"mutArrRecipients : %@", mutArrCcs);
[testMsg setCc:[NSSet setWithArray:mutArrCcs]];
}
if (bccContactArr.count>0) {
for (NSDictionary *dict in bccContactArr) {
[mutArrBccs addObject:[CTCoreAddress addressWithName:[dict valueForKey:@"name"] email:[dict valueForKey:@"email"]]];
}
NSLog(@"mutArrRecipients : %@", mutArrBccs);
[testMsg setBcc:[NSSet setWithArray:mutArrBccs]];
}
[testMsg setFrom:[NSSet setWithObject:[CTCoreAddress addressWithName:@"222222" email:@"letibe.xx@gmail.com"]]];
[testMsg setBody:self.textView.text];
[testMsg setSubject:self.textField.text];
DbManager *dbManager = [[DbManager sharedManager] switchDBWithFileName:DBNAME];
User *user = [dbManager getAccount];
NSString *account = user.account;
NSString *pwd = user.password;
NSString *emailType = user.email_type;
NSLog(@"user: %@", user);
NSLog(@"account: %@", account);
NSLog(@"pwd: %@", pwd);
NSLog(@"emailType: %@", emailType);
NSError *error;
BOOL success = [CTSMTPConnection sendMessage:testMsg server:@"smtp.gmail.com" username:@"letibe.xx@gmail.com" password:@"222222" port:25 useTLS:YES useAuth:YES error:&error];
if (!success) {
// Present the error
NSLog(@"error: %@", error);
}else{
NSLog(@"CTSMTPConnection success");
}
}];
}
答案 0 :(得分:4)
阅读SMTP协议后。我修改了CTCoreMessage.m
以删除标头中的密件抄送地址,如下所示。然后bcc地址将不会在接收器中打印。
<强> CTCoreMessage.m 强>
- (NSString *)render {
CTMIME *msgPart = myParsedMIME;
if ([myParsedMIME isKindOfClass:[CTMIME_MessagePart class]]) {
/* It's a message part, so let's set it's fields */
struct mailimf_fields *fields;
struct mailimf_mailbox *sender = (myFields->fld_sender != NULL) ? (myFields->fld_sender->snd_mb) : NULL;
struct mailimf_mailbox_list *from = (myFields->fld_from != NULL) ? (myFields->fld_from->frm_mb_list) : NULL;
struct mailimf_address_list *replyTo = (myFields->fld_reply_to != NULL) ? (myFields->fld_reply_to->rt_addr_list) : NULL;
struct mailimf_address_list *to = (myFields->fld_to != NULL) ? (myFields->fld_to->to_addr_list) : NULL;
struct mailimf_address_list *cc = (myFields->fld_cc != NULL) ? (myFields->fld_cc->cc_addr_list) : NULL;
// struct mailimf_address_list *bcc = (myFields->fld_bcc != NULL) ? (myFields->fld_bcc->bcc_addr_list) : NULL;
clist *inReplyTo = (myFields->fld_in_reply_to != NULL) ? (myFields->fld_in_reply_to->mid_list) : NULL;
clist *references = (myFields->fld_references != NULL) ? (myFields->fld_references->mid_list) : NULL;
char *subject = (myFields->fld_subject != NULL) ? (myFields->fld_subject->sbj_value) : NULL;
//TODO uh oh, when this get freed it frees stuff in the CTCoreMessage
//TODO Need to make sure that fields gets freed somewhere
// fields = mailimf_fields_new_with_data(from, sender, replyTo, to, cc, bcc, inReplyTo, references, subject);
fields = mailimf_fields_new_with_data(from, sender, replyTo, to, cc, NULL, inReplyTo, references, subject);
[(CTMIME_MessagePart *)msgPart setIMFFields:fields];
}
return [myParsedMIME render];
}
答案 1 :(得分:2)
看起来这个错误与框架本身有关,因为框架没有显示任何说明Bcc地址将被隐藏的内容
只是显示消息可以设置为bcc,cc和to。
我已经挖了2英尺的框架,但没有发现Bcc表明它会隐藏在接收端......