Hmm. So, the backend part of it - changing the relationship - you're going to want to do through FactionAPI.adjustRelationship().
For the intel/message UI, the basic flow you want is this:
1. Call Global.getSector().reportEventStage(). This requires that you a) have an event reference handy to call this from (i.e. you're probably going to want to do this from an event) and b) have a corresponding report in reports.csv, which will be used to create the message. This initiates the message being sent process; the player will receive it at some future point.
2. Pass in an OnMessageDeliveryScript implementation to reportEventStage(); probably best to do so by extending a BaseOnMessageDeliveryScript - see CustomsInspectionEvent for some examples. This lets you get a callback when the player finally receives the message, if they ever do.
3. In the beforeDelivery method of the script, you'll want to do two things - show a message in the message list UI in the campaign screen, and add some text to the "assessement" potion of the message itself, that you see in the "inbox" UI. For that, take a look at CoreReputationPlugin.addAdjustmentMessage() - it's a different use case (i.e. one faction is always the player), but it composes and puts those messages in the message list, assessment section, and interaction dialog text panel, whichever is appropriate for the params passed in.
Let me know if this makes sense; will be happy to answer in more detail where needed.