大家好,我写了一个应用程序抓取Facebook的照片。我成功地做到了。现在我在java中使用SNS编写了一个通知服务。基本上为登录我的应用程序的首次用户以及从存储库中删除图片时发送订阅。我的第一个问题是当我从Facebook下载图片和用户信息时,我想检查它是否是新用户。如果新用户发送订阅,如果没有(基本上用户存在于mongoDb中,请不要发送电子邮件进行订阅),但我的代码不断向每个用户发送电子邮件。最后,当用户删除照片时,他们会收到通知,但是当我测试它时,我没有收到电子邮件。以下是我的代码可能有人告诉我我做错了什么。
public class EmailNotifications {
private static final String accessKey = "****************";
private static final String secretAccess ="***********************";
//Notification when user gets info from facebook app for first time.
public static void SignUP(String email, String Topic){
AmazonSNSClient snsClient = new AmazonSNSClient(new BasicAWSCredentials(accessKey, secretAccess));
snsClient.setRegion(Region.getRegion(Regions.US_WEST_1));
//create a Topic
CreateTopicRequest createTopicRequest = new CreateTopicRequest().withName(Topic);
CreateTopicResult createTopicResult = snsClient.createTopic(createTopicRequest);
//subscribes to a topic
SubscribeRequest subscribeRequest = new SubscribeRequest().withTopicArn(createTopicResult.getTopicArn())
.withProtocol("email").withEndpoint(email);
snsClient.subscribe(subscribeRequest);
}
//Notification when photo is deleted
public static void deletePic(String email, String topic, String message){
AmazonSNSClient snsClient = new AmazonSNSClient(new BasicAWSCredentials(accessKey,secretAccess));
snsClient.setRegion(Region.getRegion(Regions.US_WEST_1));
CreateTopicRequest create = new CreateTopicRequest(topic);
CreateTopicResult result = snsClient.createTopic(create);
System.out.println(result);
//String msg = "My text published to SNS topic with email endpoint";
PublishRequest publishRequest = new PublishRequest(result.getTopicArn(), message);
publishRequest.setSubject("Deleted Pic");
/*PublishResult pu= */snsClient.publish(publishRequest);
}
}
下面是我对删除和抓取数据的实现,首先假设mongodb是空的:
删除照片实施:
@Override
//deletes photo from mongoDB... but doesn't send out an email stating phootid
public String deletePhoto(String id, String PhotoId){
String mssg="";
if(accountRepo.exists(id)){
UserAccounts userAccounts=accountRepo.findById(id);
UserPhotos photos = photoRepo.findByPhotoId(PhotoId);
mssg="The picture "+photos.getPhotoId()+" has been deleted from the application";
EmailNotifications.deletePic(userAccounts.getEmail(),topic,mssg);
photoRepo.delete(PhotoId);
return "Photo is deleted";
}
else
return "Photo does not exist";
}
第一次从脸上抓取照片。用户最多只能获得一个通知。但我一直收到几条消息。
@Override
public UserAccounts create(FacebookClient facebookClient){
User me = facebookClient.fetchObject("me", User.class);
UserAccounts userAccounts = new UserAccounts();
userAccounts.setEmail(me.getEmail());
userAccounts.setGender(me.getGender());
userAccounts.setId(me.getId());
userAccounts.setName(me.getName());
accountRepo.save(userAccounts);
EmailNotifications.SignUP(me.getEmail(), topic);
return userAccounts;
}
有人可以帮助我吗
答案 0 :(得分:0)
根据您的描述和代码判断,当您为用户下载时,您会猜到您收到的电子邮件是订阅确认电子邮件,因为所有EmailNotifications.SignUp
都订阅了电子邮件地址。
我猜你删除图片时没有收到任何电子邮件的原因是因为你还没有确认订阅。在订阅确认电子邮件中,应该有一个链接,您可以单击该链接以确认订阅。
至于为什么每次下载时都会收到电子邮件,我无法从您的代码中看出来,但是在您显示的create
方法中,调用SignUp进行检查时没有if
阻止如果用户已经存在,我认为这是你的问题。
顺便说一句,如果您的应用程序与用户进行交互并且您希望获得良好的电子邮件体验,那么最好使用SES,这样您就可以完全控制电子邮件的格式和品牌。