#include<iostream>
#include<string>
#include<vector>
#include<set>
#include<map>
using namespace std;
void split_address(const string& src,string& user,string& mta)
{
int k=src.find('@');
user=src.substr(0,k);
mta=src.substr(k+1);
}
int main()
{
string mta,user,tmp,mtaName;
string sendId,reciId,sendName,reciName,sendMta,reciMta;
set<string> addr;
set<string> reciIds;
map<string,vector<string> > reciMtaUsers;
int i=0;
while(cin>>mta && mta!="*")
{
int n;
cin>>mtaName>>n;
while(n--){cin>>tmp;addr.insert(tmp+"@"+mtaName);}
}
while(cin>>sendId && sendId!="*")
{
vector<string> reciMtas;
split_address(sendId,sendName,sendMta);
while(cin>>reciId && reciId!="*")
{
if(reciIds.count(reciId))continue;
reciIds.insert(reciId);
split_address(reciId,reciName,reciMta);
if(!reciMtaUsers.count(reciMta)){reciMtas.push_back(reciMta);reciMtaUsers[reciMta]=vector<string>();}
reciMtaUsers[reciMta].push_back(reciId);
}
getline(cin,tmp);
string data;
while(getline(cin,tmp) && tmp[0]!='*')data += " "+tmp+"\n";
for(int i=0;i<reciMtas.size();i++)
{
cout<<"Connnection between "<<sendMta<<" and "<<reciMtas[i]<<endl;
cout<<" HELO "<<sendMta<<"\n";
cout<<" 250\n";
cout<<" MAIL FROM:<"<<sendId<<">\n";
cout<<" 250\n";
bool isExist=false;
vector<string> users=reciMtaUsers[reciMtas[i]];
for(int i=0;i<users.size();i++)
{
cout<<" RCPT TO:<"<<users[i]<<">\n";
if(addr.count(users[i])){isExist=true;cout<<" 250\n";}
else cout<<" 550\n";
}
if(isExist)
{
cout<<" DATA\n";
cout<<" 354\n";
cout<<data;
cout<<" .\n";
cout<<" 250\n";
}
cout<<" QUIT\n";
cout<<" 221\n";
}
}
return 0;
}
814-The Letter Carrier's Rounds
最新推荐文章于 2019-02-13 21:23:47 发布