Sending a campaign to subscribers who haven't yet received it

I’m running PHPList v3.6.10, web interface installed via cPanel. I’ve got many private lists, which correspond to the groups (labels) in my google contacts. Some subscribers are on several of these lists - for instance, people who are both on “Coworkers” and “Artists”.

Now I’d like to send two campaigns to members of these various lists. But I don’t want anyone to get duplicate deliveries. So e.g., all Artists get the “Art” version of the campaign, and all Coworkers get the “Work” version, but nobody gets both.

I want to send the Art version first, to all Artists who are not also Coworkers. I checked out the Segment plugin, but couldn’t find a way to exclude Artists who are also Coworkers. (Segment’s List Membership option only allows excluding subscribers not subscribed to all the lists linked to a campaign.)

Another approach: add all the Artists to a new list “Holiday Art”. Then if there was some way of removing Coworkers from Holiday Art, I’d end up with only “pure Artists” and I could direct the Art campaign to Holiday Art. Then add other groups to Holiday Art (e.g. Family), and use the Segment plugin’s Campaign Activity to send only to the newly added Holiday Art members.

But again, I can’t find any way of doing that crucial step of removing members of one list from another. Are there any tools for doing boolean operations on lists, or excluding list members from a campaign in the web interface?

Worst case, I could write a script to externally segment the groups (Artists Only, Coworkers Only, Artists+Coworkers), then re-import the segments via csv one at a time, adding them to Holiday Art. But that’s sort of messy and painful. Plus, it means not keeping my PHPlist private lists as a clean mirror of my Google Contact groups.

Minor update: I found an unofficial plugin “Subscribers” that allows advanced searching and processing of subscribers, including moving them from one list to another. This may be a viable solution.

But still interested in additional input on this topic, if anyone spots something I’ve missed.

@meeotch There is a configuration setting for this, see config_extended.php for an explanation.

// list exclude will add the option to send a message to users who are on a list
// except when they are on another list.
define('USE_LIST_EXCLUDE', 0);

Add to your config.php file with a value of 1 to enable it.

Thanks for the reply. I tried it, and it does seem to provide functionality that would work.

Having discovered the Subscribers plugin, and also written a quick script to generate csv files that I can use to add subsets of users to lists, I’ve got several options now.

I may end up going with one of the latter, as it allows me to create campaign-specific lists that are “clean” (i.e. containing no subscribers who shouldn’t be there, rather than relying on suppression at send time.)

I was using campaign-specific lists for a while, for a different purpose, and now regret it. When all lists are shown together (e.g., in the “list” drop-down menu in the advanced search tool provided by the Subscribers plugin), it’s inconvenient to have the one or two key lists I care about buried among dozens of other lists that haven’t been relevant to me in many months. I could presumably get rid of them, but doing so and retaining the info I need would not be a trivial task.

I’ve been using list categories to solve that issue. I put all the private lists that mirror my google contacts groups into one category, and the public campaign-specific lists that are built from the private lists into another category. That way, the lists that are “canonical” (the private ones) are all on one screen, and the temporary ones for campaign sending are on another.

It’s the process of using boolean operations to build the campaign lists from the canonical ones that prompted my original post.

I think it’s the case that when I add more subscribers to a campaign list, and then re-run the campaign by moving it to Drafts and then re-queuing, the re-run will only be sent to the newly added users. At least, that’s what I think I’ve observed. If someone knows different, please feel free to correct me.

That’s correct, at least from what I’ve seen and done. I regularly add subscribers to a certain list, requeue the only campaign for that list, and run it again. It only sends to the newly added subscribers. If I’d caught on to that earlier, I wouldn’t have created all of those one-time-use lists. :roll_eyes:

I also use list categories, which helps when the UI segregates the lists accordingly. I frequently use the export feature from the advanced search, so having all lists in that one drop-down list is a persistent annoyance for me. I’m sure I could find ways to fix or improve the problem I inadvertently created, but there are too many higher priorities for now.

Just to clarify: As I understand it, to re-queue the campaign with added subscribers, and not re-send to the previously sent subscribers, you need to:

  • add additional subscribers to the lists you plan to send to (in my case, the public campaign-specific list)
  • view the already finished campaign in the Sent tab of the queue page
  • click Edit, once you are viewing the campaign
  • check all your settings, then submit to queue

The second step seems to be crucial - you don’t want to use “copy to drafts”, as that creates a new campaign (even if it has the same name). I assume that doing this will resend to all list members, as it’s essentially a brand new campaign.

But if you use the procedure above, viewing & then editing the already sent campaign, when you re-queue it, you’ll see that the Processed section shows some number already sent. It’s a bit confusing, but this is what indicates to me that PHPList is doing the “right” thing, and only sending to the newly added subscribers. (And preserving the stats for all the various re-queuings under the same campaign.)

Again, feel free to correct me if I’ve gotten it wrong, or if there’s an easier way to achieve the same thing.

I guess it would really be nice if PHPList displayed the unique campaign identifier # next to the name in all views. That way, you’d be less likely to get confused about whether stuff in the Drafts tab were “master” campaigns that you might want to re-run, or copies that are unique campaigns with no stats & no subscribers-already-sent-to data attached.

Then just click the requeue button

phplist will send a campaign only once to a subscriber, no matter how many times you requeue the campaign.

Thanks. I like to review all the settings before firing off a big e-blast, but point taken.

I almost always review all of my settings and then resubmit too, rather than directly re-queue things. I’ll only do it directly in a few cases where I feel very confident that I’m not forgetting some detail that might be problematic.

I never noticed the “copy to drafts” option. Interesting.